解决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获取单选按钮的数据
Nov 27 Javascript
Ext面向对象开发实践(续)
Nov 18 Javascript
javascript 动态数据下的锚点错位问题解决方法
Dec 24 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
Jan 11 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
Aug 14 Javascript
jQuery is()函数用法3例
May 06 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
May 08 Javascript
JavaScript学习小结(一)——JavaScript入门基础
Sep 02 Javascript
js数组常见操作及数组与字符串相互转化实例详解
Nov 10 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
Aug 24 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 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入门小知识
2008/03/24 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
Python2.x与Python3.x的区别
2016/01/14 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
使用python3构建文件传输的方法
2019/02/13 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
python实现粒子群算法
2020/10/15 Python
机械专业毕业生推荐信范文
2013/11/25 职场文书
会议主持词
2014/03/17 职场文书
大学生活自我评价
2014/04/09 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
世界十大狙击步枪排行榜
2022/03/20 杂记
python开发人人对战的五子棋小游戏
2022/05/02 Python