解決vue cli使用typescript后打包巨慢的問(wèn)題
前言
最近新開了一個(gè)項(xiàng)目,雖然用的是 vue 技術(shù)棧,但是為了項(xiàng)目的健壯性,還是強(qiáng)上了 typescript, 于是引出了下面的問(wèn)題。
問(wèn)題
之前使用過(guò) ts-loader 打包 react 項(xiàng)目,給我的感覺就是巨慢,開發(fā)環(huán)境下,每次保存后,需要等10秒鐘左右才能構(gòu)建完成,當(dāng)時(shí)為了解決這個(gè)問(wèn)題,把 ts-loader 替換成了 babel 的 typescript 插件,結(jié)果是非常的快,每次保存一秒中之內(nèi)就能完成構(gòu)建。這次在 vue 中使用 typescript,開發(fā)環(huán)境下還算快,但是構(gòu)建生產(chǎn)包時(shí),進(jìn)程都能夠被卡死,體驗(yàn)非常糟糕,接下來(lái)講解如何替換 typescript 構(gòu)建工具。
替換 ts-loader
修改 vue webpack 配置之前,我們需要知道 vue 是如何配置 ts-loader的,運(yùn)行如下代碼,輸出 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, 同時(shí)還使用到了 babel, 這倒是為我們后期的配置提供了不少方便。
首先刪除 ts-loader 的配置,因?yàn)?vue webpack 的配置使用的是 webpack-chain,所以這里也需要用到這個(gè)工具才能進(jìn)行修改,代碼如下:
// 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, 那么可能還需要添加如下配置項(xiàng),反正我是遇到了解析 jsx 出錯(cuò)的問(wèn)題。
module.exports = {
presets: [
'@vue/app',
["@babel/preset-typescript", {
"allExtensions": true,
"isTSX": true
}],
],
plugins: [
"@babel/plugin-transform-typescript"
]
}
最后再打包,嗯~ 比之前快多了!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在Vant的基礎(chǔ)上實(shí)現(xiàn)添加表單驗(yàn)證框架的方法示例
這篇文章主要介紹了在Vant的基礎(chǔ)上實(shí)現(xiàn)添加驗(yàn)證框架的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
vue如何導(dǎo)出文件流獲取附件名稱并下載(在response.headers里解析filename導(dǎo)出)
這篇文章主要介紹了vue如何導(dǎo)出文件流獲取附件名稱并下載(在response.headers里解析filename導(dǎo)出),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
vue3實(shí)現(xiàn)國(guó)際化的過(guò)程與遇到的問(wèn)題詳解
像很多大型的網(wǎng)址,特別是跨國(guó)際等公司網(wǎng)頁(yè),訪問(wèn)來(lái)自世界各地用戶,所以網(wǎng)頁(yè)的國(guó)際化極其重要的需求,這篇文章主要給大家介紹了關(guān)于vue3實(shí)現(xiàn)國(guó)際化的過(guò)程與遇到的問(wèn)題的相關(guān)資料,需要的朋友可以參考下2022-05-05
vue 導(dǎo)航錨點(diǎn)_點(diǎn)擊平滑滾動(dòng),導(dǎo)航欄對(duì)應(yīng)變化詳解
這篇文章主要介紹了vue 導(dǎo)航錨點(diǎn)_點(diǎn)擊平滑滾動(dòng),導(dǎo)航欄對(duì)應(yīng)變化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
詳解vue-cil和webpack中本地靜態(tài)圖片的路徑問(wèn)題解決方案
這篇文章主要介紹了詳解vue-cil和webpack中本地靜態(tài)圖片的路徑問(wèn)題解決方案,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-09-09
vue中watch監(jiān)聽器的觸發(fā)時(shí)機(jī)(watch的坑及解決)
這篇文章主要介紹了vue中watch監(jiān)聽器的觸發(fā)時(shí)機(jī)(watch的坑及解決),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04

