Vue项目从webpack3.x升级webpack4不完全指南


Posted in Javascript onApril 28, 2019

前段时间,泡面将自己的一个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的配置修改回了原先:

...
const vueLoaderConfig = require('./vue-loader.conf')
...
module.exports = {
 ...
  {
   test: /\.vue$/,
    // loader: 'happypack/loader?id=happy-vue'
    loader: 'vue-loader',
    options: vueLoaderConfig
  },
 ... 
}

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

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

...
 // 开发环境引入
 mode: 'development',
 ...
 module: {
  ...
 }
 devServer: {
  ...
 }

webpack4需要手动引入vue-loader插件,因为泡面是从14版本升级到15版本,点我查看官方文档,如何从 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

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

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

...
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, 至此该文件就调整完了.

最后一个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的配置文件就全部修改完成了.

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

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不完全指南,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的

Javascript 相关文章推荐
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
Jan 12 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
May 13 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
May 23 Javascript
javascript合并表格单元格实例代码
Jan 03 Javascript
常用的JQuery函数及功能小结
Mar 24 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
Apr 18 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
详解原生js实现offset方法
Jun 15 Javascript
详解如何优雅地在React项目中使用Redux
Dec 28 Javascript
JS+H5 Canvas实现时钟效果
Jul 20 Javascript
小程序点击图片实现自动播放视频
May 29 Javascript
vue 组件基础知识总结
Jan 26 Vue.js
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
Apr 28 #jQuery
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 #Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 #Javascript
详解vue更改头像功能实现
Apr 28 #Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
Apr 28 #Javascript
js+html5 canvas实现ps钢笔抠图
Apr 28 #Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
Apr 28 #Javascript
You might like
PHP编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
javascript 打印页面代码
2009/03/24 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
js读取cookie方法总结
2014/10/31 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
Python验证企业工商注册码
2015/10/25 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
python之mock模块基本使用方法详解
2019/06/27 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
社区中秋节活动方案
2014/01/29 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
三万活动总结
2014/04/28 职场文书
植树节新闻稿
2015/07/17 职场文书
中学团支部工作总结
2015/08/13 职场文书
《迟到》教学反思
2016/02/24 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
分析Java中Map的遍历性能问题
2021/06/26 Java/Android