解决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 相关文章推荐
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
css样式标签和js语法属性区别
Nov 06 Javascript
JQuery对表单元素的基本操作使用总结
Jul 18 Javascript
jquery密码强度校验
Dec 02 Javascript
Angularjs全局变量被作用域监听的正确姿势
Feb 06 Javascript
jquery.Callbacks的实现详解
Nov 30 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 Javascript
微信小程序实现星级评价效果
Dec 28 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
Apr 12 Javascript
JS学习笔记之原型链和利用原型实现继承详解
May 29 Javascript
angular4实现带搜索的下拉框
Mar 25 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
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
php生成扇形比例图实例
2013/11/06 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
Python入门教程之运算符与控制流
2016/08/17 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
法国房车租赁网站:Yescapa
2019/08/26 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
营销学习心得体会
2014/09/12 职场文书
用人单位聘用意向书
2015/05/11 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫