Vue項(xiàng)目從webpack3.x升級(jí)webpack4不完全指南
前段時(shí)間,泡面將自己的一個(gè)Vue-cli構(gòu)建的前端框架從webpack3.x升級(jí)到了4.x版本,現(xiàn)在才拉出來記錄一下,已備忘之用,也和大家分享一下,以免大家采坑。
原先的環(huán)境
- 項(xiàng)目原先通過Vue-cli 2.9.3 版本構(gòu)建,原先使用的webpack 3.x版本
- 首先需要對(duì)基礎(chǔ)包進(jìn)行更新(package.json)
- webpack 更新到4.x版本,泡面這里更新到了4.28.3
- 更新webpack-dev-server,泡面更新到了3.1.14版本,
- 安裝webpack-cli,泡面安裝的是3.2.1版本
除了上面的這幾個(gè),還需要更新下面幾個(gè):
- vue-loader 泡面直接升級(jí)到了15版本,
- eslint-loader 升級(jí)到了1.7.1,這個(gè)當(dāng)時(shí)在做啟動(dòng)的時(shí)候提示了一些錯(cuò)誤,所以索性也就升級(jí)了.
- happypack, 泡面使用了多線程加速,所以這個(gè)也必須要升級(jí),否則會(huì)報(bào)錯(cuò),泡面更新到了5.0.1
- html-webpack-plugin, 這個(gè)也需要更新,否則會(huì)提示錯(cuò)誤,泡面這里升級(jí)到了3.2.0
除了上面幾個(gè),還需要額外下載一個(gè):
- mini-css-extract-plugin, 該包是要替換掉extract-text-webpack-plugin來使用,所以后者就遺棄掉了.
接著我們修改一下webpack.base.conf.js
,沒有使用happypack的這步驟可略過...
泡面這里不知道為什么不能使用happypack來掛載vue-loader
,否則會(huì)提示錯(cuò)誤,所以泡面這里將原先的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需要手動(dòng)引入vue-loader
插件,因?yàn)榕菝媸菑?4版本升級(jí)到15版本,點(diǎn)我查看官方文檔,如何從 v14 遷移,所以這里需要引入:
... const VueLoaderPlugin = require('vue-loader/lib/plugin') ... module.export = { ... plugins: [ ... // 引入vue-loader插件 new VueLoaderPlugin(), ... // 同時(shí),泡面注釋掉了vue-loader的happypack // new Happypack({ // id: 'happy-vue', // loaders: [{ // loader: 'vue-loader', // options: vueLoaderConfig // }] // }) ] }
接著, 以下插件被廢棄掉了,直接注釋掉
- webpack.DefinePlugin
- webpack.NamedModulesPlugin
- webpack.NoEmitOnErrorsPlugin
ok, 這個(gè)文件就改完了.
接著來修改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)整完了.
最后一個(gè)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的配置文件就全部修改完成了.
目前, 泡面至在此記錄流水賬,回頭性能測(cè)試再發(fā)文章記錄.
ps: 如果出現(xiàn)這種錯(cuò)誤
error: [vue-loader] vue-template-compiler must be installed as a peer dependency, or a compatible compiler implementation must be passed via options.
請(qǐng)重新安裝一下 vue-template-compiler
總結(jié)
以上所述是小編給大家介紹的Vue項(xiàng)目從webpack3.x升級(jí)webpack4不完全指南,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的
相關(guān)文章
Vue利用廣度優(yōu)先搜索實(shí)現(xiàn)watch
這篇文章主要為大家學(xué)習(xí)介紹了Vue如何利用廣度優(yōu)先搜索實(shí)現(xiàn)watch(有意思),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-08-08原生JS實(shí)現(xiàn)Vue transition fade過渡動(dòng)畫效果示例
這篇文章主要為大家介紹了原生JS實(shí)現(xiàn)Vue transition fade過渡動(dòng)畫效果示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06VUE DEMO之模擬登錄個(gè)人中心頁(yè)面之間數(shù)據(jù)傳值實(shí)例
今天小編就為大家分享一篇VUE DEMO之模擬登錄個(gè)人中心頁(yè)面之間數(shù)據(jù)傳值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10webpack+vue+express(hot)熱啟動(dòng)調(diào)試簡(jiǎn)單配置方法
今天小編就為大家分享一篇webpack+vue + express (hot) 熱啟動(dòng)調(diào)試簡(jiǎn)單配置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09vue通過v-show實(shí)現(xiàn)回到頂部top效果
這篇文章主要介紹了vue通過v-show實(shí)現(xiàn)回到頂部top效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12Vue axios全局?jǐn)r截 get請(qǐng)求、post請(qǐng)求、配置請(qǐng)求的實(shí)例代碼
這篇文章主要介紹了Vue axios全局?jǐn)r截 get請(qǐng)求、post請(qǐng)求、配置請(qǐng)求的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11vue頁(yè)面跳轉(zhuǎn)后返回原頁(yè)面初始位置方法
下面小編就為大家分享一篇vue頁(yè)面跳轉(zhuǎn)后返回原頁(yè)面初始位置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02