解决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 相关文章推荐
Extjs Ajax 乱码问题解决方案
Apr 15 Javascript
验证javascript中Object和Function的关系的三段简单代码
Jun 27 Javascript
javascript学习之闭包分析
Dec 02 Javascript
javascript学习笔记(八) js内置对象
Jun 19 Javascript
javascript实现图片自动和可控的轮播切换特效
Apr 13 Javascript
axios学习教程全攻略
Mar 26 Javascript
JavaScript无操作后屏保功能的实现方法
Jul 04 Javascript
深入理解Vue Computed计算属性原理
May 29 Javascript
原生实现一个react-redux的代码示例
Jun 08 Javascript
js实现指定时间倒计时效果
Aug 26 Javascript
微信小程序转化为uni-app项目的方法示例
May 22 Javascript
一起来看看Vue的核心原理剖析
Mar 24 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
Javascript 中介者模式实例
2009/12/16 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
常用DOM整理
2015/06/16 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
python代码实现ID3决策树算法
2017/12/20 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
python3将变量输入的简单实例
2020/08/19 Python
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
毕业生工作求职信
2014/06/30 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
2014年标准化工作总结
2014/12/17 职场文书
企业催款函范本
2015/06/24 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
汉语拼音教学反思
2016/02/22 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android