解决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 相关文章推荐
鼠标经过显示二级菜单js特效
Aug 13 Javascript
JavaScript修改css样式style动态改变元素样式
Dec 16 Javascript
jqGrid表格应用之新增与删除数据附源码下载
Dec 02 Javascript
浅谈JS运算符&&和|| 及其优先级
Aug 10 Javascript
webix+springmvc session超时跳转登录页面
Oct 30 Javascript
js中DOM三级列表(代码分享)
Mar 20 Javascript
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
vue中关闭eslint的方法分析
Aug 04 Javascript
Vue中的Props(不可变状态)
Sep 29 Javascript
node 文件上传接口的转发的实现
Sep 23 Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 Javascript
vue2.x数组劫持原理的实现
Apr 19 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
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
javascript数组去掉重复
2011/05/12 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
双十佳事迹材料
2014/01/29 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
初中作文评语集锦
2014/12/25 职场文书