升级webpack4
最近在折腾公司项目webpack4升级问题,在这里简单介绍下webpack4之后的不同和那些需要注意修改的地方。
先给出webpack官方更新说明链接:
https://github.com/webpack/webpack/releases/tag/v4.0.0
node版本依赖调整
依赖的node环境版本>=6.11.5,已不再支持node 4,建议最佳es6体验node版本更新至8.9.4
1 | //wepback - package.json |
mode
webpack新增了mode选项,可配置也可以作为cli参数传递。mode的值如下
选项 | 描述 |
---|---|
development | 启用NamedChunksPlugin和NamedModulesPlugin。 |
production | 启用FlagDependencyUsagePlugin,FlagIncludedChunksPlugin,ModuleConcatenationPlugin,NoEmitOnErrorsPlugin,OccurrenceOrderPlugin,SideEffectsFlagPlugin和UglifyJsPlugin。 |
none | 退出任何默认优化选项 |
mode默认值为production
webpack4之前需要配置很多东西,但是4之后新增了默认项,实际上我们可以不用太关心优化的相关配置,因为–mode production配置会开启所有的优化插件,我们应该更关心配置业务相关的entry,output,module。
plugins变化
1 | You no longer need to use these plugins: |
1.bye commonchunk
commonChunkPlugin已经被移除,之前需要通过配置两次来分别获取vendor和manifest的方式做了整合,直接在optimization中配置splitChunks和runtimeChunk即可
before
1 | new webpack.optimize.CommonsChunkPlugin({ |
after
1 | optimization:{ |
2.UglifyjsWebpackPlugin
1 | // mode-production默认开启了,会使用uglifyjs插件最小化捆绑 |
3.bye extract-text-webpack-plugin
extract-text-webpack-plugin 在webpack4中被替换成 mini-css-extract-plugin
before
1 | new ExtractTextPlugin({ |
after
1 | new MiniCssExtractPlugin({ |
vue-loader
vue-loader在15之后需要在webpack配置引入当做插件,参考文档,就像这样
1 | const VueLoaderPlugin = require('vue-loader/lib/plugin') |
同时可以去掉vue-loader中的options,Vue Loader 允许你使用其它 webpack loader 处理 Vue 组件的某一部分。它会根据 lang 特性以及你 webpack 配置中的规则自动推断出要使用的 loader。
1 | { |
其他
package.json配置
1 | "dev": "webpack-dev-server --mode development --progress --hot --hotOnly --config build/webpack.config.js --hide-modules", |
其他包的升级
- vue-loader
- vue-style-loader
- webpack-cli
- webpack-dev-server
- file-loader
- css-loader
成果
webpack | 2.7.0 | 4.16.1 | 提升 |
---|---|---|---|
大小 | (474.27k)parsed | (291.15k)parsed (100.65k)gzipped | 38.61% |
编译时间 | 8728ms | 5678ms | 34.94% |