解决vue cli使用typescript后打包巨慢的问题


Posted in Javascript onSeptember 30, 2019

前言

最近新开了一个项目,虽然用的是 vue 技术栈,但是为了项目的健壮性,还是强上了 typescript, 于是引出了下面的问题。

问题

之前使用过 ts-loader 打包 react 项目,给我的感觉就是巨慢,开发环境下,每次保存后,需要等10秒钟左右才能构建完成,当时为了解决这个问题,把 ts-loader 替换成了 babel 的 typescript 插件,结果是非常的快,每次保存一秒中之内就能完成构建。这次在 vue 中使用 typescript,开发环境下还算快,但是构建生产包时,进程都能够被卡死,体验非常糟糕,接下来讲解如何替换 typescript 构建工具。

替换 ts-loader

修改 vue webpack 配置之前,我们需要知道 vue 是如何配置 ts-loader的,运行如下代码,输出 webpack 配置文件:

vue inspect > output.js

打开 output.js 搜索 ts-loader,可以看到如下配置:

/* config.module.rule('ts') */
{
  test: /\.ts$/,
  use: [
  /* config.module.rule('ts').use('cache-loader') */
  {
    loader: 'cache-loader',
    options: {
    cacheDirectory: '/Users/edz/Desktop/project/senguo/cashier-admin/node_modules/.cache/ts-loader',
    cacheIdentifier: 'aee3033a'
    }
  },
  /* config.module.rule('ts').use('babel-loader') */
  {
    loader: 'babel-loader'
  },
  /* config.module.rule('ts').use('ts-loader') */
  {
    loader: 'ts-loader',
    options: {
    transpileOnly: true,
    appendTsSuffixTo: [
      '\\.vue$'
    ],
    happyPackMode: false
    }
  }
  ]
},
/* config.module.rule('tsx') */
{
  test: /\.tsx$/,
  use: [
  /* config.module.rule('tsx').use('cache-loader') */
  {
    loader: 'cache-loader',
    options: {
    cacheDirectory: '/Users/edz/Desktop/project/senguo/cashier-admin/node_modules/.cache/ts-loader',
    cacheIdentifier: 'aee3033a'
    }
  },
  /* config.module.rule('tsx').use('babel-loader') */
  {
    loader: 'babel-loader'
  },
  /* config.module.rule('tsx').use('ts-loader') */
  {
    loader: 'ts-loader',
    options: {
    transpileOnly: true,
    happyPackMode: false,
    appendTsxSuffixTo: [
      '\\.vue$'
    ]
    }
  }
  ]
}

可以看到使用到了 ts-loader, 同时还使用到了 babel, 这倒是为我们后期的配置提供了不少方便。

首先删除 ts-loader 的配置,因为 vue webpack 的配置使用的是 webpack-chain,所以这里也需要用到这个工具才能进行修改,代码如下:

// vue.config.js

module.exports = {
  chainWebpack: config => {
    config.module.rule('ts').uses.delete('ts-loader')
    config.module.rule('tsx').uses.delete('ts-loader')
  }
}

接着安装 babel 的 typescript 插件

yarn add @babel/preset-typescript @babel/plugin-transform-typescript

然后修改 babel.config.js 如下:

module.exports = {
  presets: [
    '@vue/app',
    "@babel/preset-typescript"
  ],
  plugins: [
    "@babel/plugin-transform-typescript"
  ]
}

如果你在代码中使用到了 jsx, 那么可能还需要添加如下配置项,反正我是遇到了解析 jsx 出错的问题。

module.exports = {
  presets: [
    '@vue/app',
    ["@babel/preset-typescript", {
      "allExtensions": true,
      "isTSX": true
    }],
  ],
  plugins: [
    "@babel/plugin-transform-typescript"
  ]
}

最后再打包,嗯~ 比之前快多了!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
Mar 25 Javascript
JS判断对象是否存在的10种方法总结
Dec 23 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
Sep 27 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
Nov 30 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
Sep 28 Javascript
9种改善AngularJS性能的方法
Nov 28 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 Javascript
为vue项目自动设置请求状态的配置方法
Jun 09 Javascript
js实现拖拽与碰撞检测
Sep 18 Javascript
javascript进阶篇深拷贝实现的四种方式
Jul 07 Javascript
laravel实现中文和英语互相切换的例子
Sep 30 #Javascript
JavaScript键盘事件响应顺序详解
Sep 30 #Javascript
vue自动化路由的实现代码
Sep 30 #Javascript
js实现图片上传即时显示效果
Sep 30 #Javascript
vue实现select下拉显示隐藏功能
Sep 30 #Javascript
createObjectURL方法实现本地图片预览
Sep 30 #Javascript
微信小程序实现分享商品海报功能
Sep 30 #Javascript
You might like
一个程序下载的管理程序(一)
2006/10/09 PHP
WHOIS类的修改版
2006/10/09 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
在Django的URLconf中使用命名组的方法
2015/07/18 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
html5读取本地文件示例代码
2014/04/22 HTML / CSS
html5唤起app的方法
2017/11/30 HTML / CSS
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
售后服务科岗位职责范文
2013/11/13 职场文书
小区门卫管理制度
2014/01/29 职场文书
甘南现象心得体会
2014/09/11 职场文书
2014年科协工作总结
2014/12/09 职场文书
2015年药房工作总结
2015/04/25 职场文书
Python字符串格式化方式
2022/04/07 Python