解决vue cli使用typescript后打包巨慢的问题
前言
最近新开了一个项目,虽然用的是 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"
]
}
最后再打包,嗯~ 比之前快多了!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
使用elementuiadmin去掉默认mock权限控制的设置
这篇文章主要介绍了使用elementuiadmin去掉默认mock权限控制的设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-04-04
Vue CompositionAPI中watch和watchEffect的区别详解
这篇文章主要为大家详细介绍了Vue CompositionAPI中watch和watchEffect的区别,文中的示例代码简洁易懂,希望对大家学习Vue有一定的帮助2023-06-06
vuecli+AXdownload下载组件封装 +css3下载悬浮球动画效果
当触发下载功能的时候,会触发一个下载动画,下载悬浮球会自动弹出,并且闪烁提示有新的下载任务直到下载任务完场提示,接下来通过本文介绍vuecli+AXdownload下载组件封装 +css3下载悬浮球动画效果,需要的朋友可以参考下2024-05-05
解决修复报错Error in render:TypeError:Cannot read&n
这篇文章主要介绍了解决修复报错Error in render:TypeError:Cannot read properties of undefined(reading ‘ipconfig‘)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-03-03


最新评论