Vue項(xiàng)目從webpack3.x升級webpack4不完全指南
前段時間,泡面將自己的一個Vue-cli構(gòu)建的前端框架從webpack3.x升級到了4.x版本,現(xiàn)在才拉出來記錄一下,已備忘之用,也和大家分享一下,以免大家采坑。
原先的環(huán)境
- 項(xiàng)目原先通過Vue-cli 2.9.3 版本構(gòu)建,原先使用的webpack 3.x版本
- 首先需要對基礎(chǔ)包進(jìn)行更新(package.json)
- webpack 更新到4.x版本,泡面這里更新到了4.28.3
- 更新webpack-dev-server,泡面更新到了3.1.14版本,
- 安裝webpack-cli,泡面安裝的是3.2.1版本
除了上面的這幾個,還需要更新下面幾個:
- vue-loader 泡面直接升級到了15版本,
- eslint-loader 升級到了1.7.1,這個當(dāng)時在做啟動的時候提示了一些錯誤,所以索性也就升級了.
- happypack, 泡面使用了多線程加速,所以這個也必須要升級,否則會報錯,泡面更新到了5.0.1
- html-webpack-plugin, 這個也需要更新,否則會提示錯誤,泡面這里升級到了3.2.0
除了上面幾個,還需要額外下載一個:
- mini-css-extract-plugin, 該包是要替換掉extract-text-webpack-plugin來使用,所以后者就遺棄掉了.
接著我們修改一下webpack.base.conf.js,沒有使用happypack的這步驟可略過...
泡面這里不知道為什么不能使用happypack來掛載vue-loader,否則會提示錯誤,所以泡面這里將原先的happypack的配置修改回了原先:
...
const vueLoaderConfig = require('./vue-loader.conf')
...
module.exports = {
...
{
test: /\.vue$/,
// loader: 'happypack/loader?id=happy-vue'
loader: 'vue-loader',
options: vueLoaderConfig
},
...
}
接著來調(diào)整 webpack.dev.conf.js
首先在合并配置的地方引入mode
...
// 開發(fā)環(huán)境引入
mode: 'development',
...
module: {
...
}
devServer: {
...
}
webpack4需要手動引入vue-loader插件,因?yàn)榕菝媸菑?4版本升級到15版本,點(diǎn)我查看官方文檔,如何從 v14 遷移,所以這里需要引入:
...
const VueLoaderPlugin = require('vue-loader/lib/plugin')
...
module.export = {
...
plugins: [
...
// 引入vue-loader插件
new VueLoaderPlugin(),
...
// 同時,泡面注釋掉了vue-loader的happypack
// new Happypack({
// id: 'happy-vue',
// loaders: [{
// loader: 'vue-loader',
// options: vueLoaderConfig
// }]
// })
]
}
接著, 以下插件被廢棄掉了,直接注釋掉
- webpack.DefinePlugin
- webpack.NamedModulesPlugin
- webpack.NoEmitOnErrorsPlugin
ok, 這個文件就改完了.
接著來修改webpack.prod.conf.js
同開發(fā)環(huán)境,需要引入mode和vue-loader,一模一樣,所以這里不贅述了.
接著,我們需要在配置表里添加optimization選項(xiàng):
...
output: { ...},
// 這里添加
optimization: {
runtimeChunk: {
name: 'manifest'
},
minimizer: [
new UglifyJsPlugin({
cache: true,
parallel: true,
sourceMap: config.build.productionSourceMap,
uglifyOptions: {
warnings: false
}
}),
new OptimizeCSSPlugin({
cssProcessorOptions: config.build.productionSourceMap
? { safe: true, map: { inline: false } }
: { safe: true }
}),
],
splitChunks:{
chunks: 'async',
minSize: 30000,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 3,
name: false,
cacheGroups: {
vendor: {
name: 'vendor',
chunks: 'initial',
priority: -10,
reuseExistingChunk: false,
test: /node_modules\/(.*)\.js/
},
styles: {
name: 'styles',
test: /\.(scss|css)$/,
chunks: 'all',
minChunks: 1,
reuseExistingChunk: true,
enforce: true
}
}
}
},
plugins: [...]
接著,我們需要引入mini-css-extract-plugin插件,并添加到插件里:
...
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
...
plugins: [
...
new MiniCssExtractPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css')
}),
...
]
然后, 我們需要把廢棄掉的插件注釋掉:
webpack.DefinePlugin UglifyJsPlugin (放到optimization里了) ExtractTextPlugin OptimizeCSSPlugin (放到optimization里了) CommonsChunkPlugin (所有的...)
ok, 至此該文件就調(diào)整完了.
最后一個utils.js
這里主要是需要添加mini-css-extract-plugin插件
...
// 注釋掉原來的插件
// const ExtractTextPlugin = require("extract-text-webpack-plugin");
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
...
// 找到:
// return ExtractTextPlugin.extract({
// use: loaders,
// fallback: "vue-style-loader",
// publicPath: '../../'
// });
// 改為:
return [MiniCssExtractPlugin.loader].concat(loaders)
ok, 大功告成! 至此webpack4的配置文件就全部修改完成了.
目前, 泡面至在此記錄流水賬,回頭性能測試再發(fā)文章記錄.
ps: 如果出現(xiàn)這種錯誤
error: [vue-loader] vue-template-compiler must be installed as a peer dependency, or a compatible compiler implementation must be passed via options.
請重新安裝一下 vue-template-compiler
總結(jié)
以上所述是小編給大家介紹的Vue項(xiàng)目從webpack3.x升級webpack4不完全指南,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的
相關(guān)文章
利用Vue.js框架實(shí)現(xiàn)火車票查詢系統(tǒng)(附源碼)
這篇文章主要介紹了利用Vue.js框架實(shí)現(xiàn)火車票查詢系統(tǒng)的相關(guān)資料,,文中給出了詳細(xì)的介紹與示例代碼,并在文章結(jié)尾給出了完整的項(xiàng)目下載,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02
vue 2 實(shí)現(xiàn)自定義組件一到多個v-model雙向數(shù)據(jù)綁定的方法(最新推薦)
有時候我們需要對一個組件綁定自定義 v-model,以更方便地實(shí)現(xiàn)雙向數(shù)據(jù),例如自定義表單輸入控件,這篇文章主要介紹了vue 2 實(shí)現(xiàn)自定義組件一到多個v-model雙向數(shù)據(jù)綁定的方法,需要的朋友可以參考下2024-07-07
關(guān)于element?ui?表格中的常見特殊屬性說明
這篇文章主要介紹了關(guān)于element?ui?表格中的常見特殊屬性說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
ElementUI中el-dropdown-item點(diǎn)擊事件無效問題
這篇文章主要介紹了ElementUI中el-dropdown-item點(diǎn)擊事件無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
詳解element-ui級聯(lián)菜單(城市三級聯(lián)動菜單)和回顯問題
這篇文章主要介紹了詳解element-ui級聯(lián)菜單(城市三級聯(lián)動菜單)和回顯問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
在nuxt使用vueX代替storage的實(shí)現(xiàn)方案
這篇文章主要介紹了在nuxt使用vueX代替storage的實(shí)現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
Vue3訪問頁面時自動獲取數(shù)據(jù)的方法實(shí)現(xiàn)
本文介紹了在Vue3中如何利用生命周期鉤子函數(shù)和定時器實(shí)現(xiàn)訪問頁面時自動獲取數(shù)據(jù)的方法,這種方法適用于需要在頁面加載時即時更新數(shù)據(jù)顯示的場景,感興趣的可以了解一下2024-11-11
uni-app中App與webview雙向?qū)崟r通信詳細(xì)代碼示例
在移動應(yīng)用開發(fā)中,uni-app是一個非常流行的框架,它允許開發(fā)者使用一套代碼庫構(gòu)建多端應(yīng)用,包括H5、小程序、App等,這篇文章主要給大家介紹了關(guān)于uni-app中App與webview雙向?qū)崟r通信的相關(guān)資料,需要的朋友可以參考下2024-07-07

