解决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 相关文章推荐
jquery简单瀑布流实现原理及ie8下测试代码
Jan 23 Javascript
有关于JS构造函数的重载和工厂方法
Apr 07 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
详解javascript实现瀑布流列式布局
Jan 29 Javascript
jquery简单插件制作(fn.extend)完整实例
May 24 Javascript
Vue.js实战之组件之间的数据传递
Apr 01 Javascript
解决iview打包时UglifyJs报错的问题
Mar 07 Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 Javascript
JavaScript RegExp 对象用法详解
Sep 24 Javascript
如何在Vue.JS中使用图标组件
Aug 04 Javascript
javascript实现移动端上传图片功能
Aug 18 Javascript
详解Vue的options
May 15 Vue.js
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
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
python变量的存储原理详解
2019/07/10 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
竞聘上岗演讲稿范文
2014/01/10 职场文书
对祖国的寄语大全
2014/04/11 职场文书
工程承包协议书
2014/04/22 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
班风学风建设方案
2014/05/06 职场文书
村委会贫困证明范本
2014/09/17 职场文书
2014年基建工作总结
2014/12/12 职场文书
生日宴会祝酒词
2015/08/10 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书