解决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控制图片的hover效果(smartRollover.js)
Mar 18 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
Jan 30 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
JavaScript常用正则函数用法示例
Jan 23 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
Apr 29 jQuery
利用jsonp解决js读取本地json跨域的问题
Dec 11 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
Vue获取页面元素的相对位置的方法示例
Feb 05 Javascript
从零使用TypeScript开发项目打包发布到npm
Feb 14 Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 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和ACCESS写聊天室(七)
2006/10/09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
JS解析XML的实现代码
2009/11/12 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
vue-model实现简易计算器
2020/08/17 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
django的model操作汇整详解
2019/07/26 Python
如何教少儿学习Python编程
2020/07/10 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
女大学生毕业找工作的自我评价
2013/10/03 职场文书
大学生护理专业自荐信
2013/10/03 职场文书
大学生求职简历的自我评价
2013/10/21 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
《画》教学反思
2014/04/14 职场文书
紫日观后感
2015/06/05 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
初二物理教学反思
2016/02/19 职场文书
2019各种保证书范文
2019/06/24 职场文书