经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » webpack » 查看文章
Vue项目从webpack3.x升级webpack4不完全指南
来源:jb51  时间:2019/4/29 8:33:43  对本文有异议

前段时间,泡面将自己的一个Vue-cli构建的前端框架从webpack3.x升级到了4.x版本,现在才拉出来记录一下,已备忘之用,也和大家分享一下,以免大家采坑。

原先的环境

  • 项目原先通过Vue-cli 2.9.3 版本构建,原先使用的webpack 3.x版本
  • 首先需要对基础包进行更新(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,这个当时在做启动的时候提示了一些错误,所以索性也就升级了.
  • 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的配置修改回了原先:

  1. ...
  2. const vueLoaderConfig = require('./vue-loader.conf')
  3. ...
  4. module.exports = {
  5. ...
  6. {
  7. test: /\.vue$/,
  8. // loader: 'happypack/loader?id=happy-vue'
  9. loader: 'vue-loader',
  10. options: vueLoaderConfig
  11. },
  12. ...
  13. }

接着来调整 webpack.dev.conf.js

首先在合并配置的地方引入mode

  1. ...
  2. // 开发环境引入
  3. mode: 'development',
  4. ...
  5. module: {
  6. ...
  7. }
  8. devServer: {
  9. ...
  10. }

webpack4需要手动引入vue-loader插件,因为泡面是从14版本升级到15版本,点我查看官方文档,如何从 v14 迁移,所以这里需要引入:

  1. ...
  2. const VueLoaderPlugin = require('vue-loader/lib/plugin')
  3. ...
  4. module.export = {
  5. ...
  6. plugins: [
  7. ...
  8. // 引入vue-loader插件
  9. new VueLoaderPlugin(),
  10. ...
  11. // 同时,泡面注释掉了vue-loader的happypack
  12. // new Happypack({
  13. // id: 'happy-vue',
  14. // loaders: [{
  15. // loader: 'vue-loader',
  16. // options: vueLoaderConfig
  17. // }]
  18. // })
  19. ]
  20. }

接着, 以下插件被废弃掉了,直接注释掉

  • webpack.DefinePlugin
  • webpack.NamedModulesPlugin
  • webpack.NoEmitOnErrorsPlugin

ok, 这个文件就改完了.

接着来修改webpack.prod.conf.js

同开发环境,需要引入mode和vue-loader,一模一样,所以这里不赘述了.

接着,我们需要在配置表里添加optimization选项:

  1. ...
  2. output: { ...},
  3. // 这里添加
  4. optimization: {
  5. runtimeChunk: {
  6. name: 'manifest'
  7. },
  8. minimizer: [
  9. new UglifyJsPlugin({
  10. cache: true,
  11. parallel: true,
  12. sourceMap: config.build.productionSourceMap,
  13. uglifyOptions: {
  14. warnings: false
  15. }
  16. }),
  17. new OptimizeCSSPlugin({
  18. cssProcessorOptions: config.build.productionSourceMap
  19. ? { safe: true, map: { inline: false } }
  20. : { safe: true }
  21. }),
  22. ],
  23. splitChunks:{
  24. chunks: 'async',
  25. minSize: 30000,
  26. minChunks: 1,
  27. maxAsyncRequests: 5,
  28. maxInitialRequests: 3,
  29. name: false,
  30. cacheGroups: {
  31. vendor: {
  32. name: 'vendor',
  33. chunks: 'initial',
  34. priority: -10,
  35. reuseExistingChunk: false,
  36. test: /node_modules\/(.*)\.js/
  37. },
  38. styles: {
  39. name: 'styles',
  40. test: /\.(scss|css)$/,
  41. chunks: 'all',
  42. minChunks: 1,
  43. reuseExistingChunk: true,
  44. enforce: true
  45. }
  46. }
  47. }
  48. },
  49. plugins: [...]

接着,我们需要引入mini-css-extract-plugin插件,并添加到插件里:

  1. ...
  2. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  3. ...
  4. plugins: [
  5. ...
  6. new MiniCssExtractPlugin({
  7. filename: utils.assetsPath('css/[name].[contenthash].css')
  8. }),
  9. ...
  10. ]

然后, 我们需要把废弃掉的插件注释掉:

  1. webpack.DefinePlugin
  2. UglifyJsPlugin (放到optimization里了)
  3. ExtractTextPlugin
  4. OptimizeCSSPlugin (放到optimization里了)
  5. CommonsChunkPlugin (所有的...)

ok, 至此该文件就调整完了.

最后一个utils.js

这里主要是需要添加mini-css-extract-plugin插件

  1. ...
  2. // 注释掉原来的插件
  3. // const ExtractTextPlugin = require("extract-text-webpack-plugin");
  4. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  5. ...
  6. // 找到:
  7. // return ExtractTextPlugin.extract({
  8. // use: loaders,
  9. // fallback: "vue-style-loader",
  10. // publicPath: '../../'
  11. // });
  12. // 改为:
  13. return [MiniCssExtractPlugin.loader].concat(loaders)

ok, 大功告成! 至此webpack4的配置文件就全部修改完成了.

目前, 泡面至在此记录流水账,回头性能测试再发文章记录.

ps: 如果出现这种错误

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

总结

以上所述是小编给大家介绍的Vue项目从webpack3.x升级webpack4不完全指南,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号