最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

webpack4的迁移的使用方法

来源:懂视网 责编:小采 时间:2020-11-27 22:14:06
文档

webpack4的迁移的使用方法

webpack4的迁移的使用方法:感觉是突然之间,webpack4的消息就满天飞了,听说打包速度提高了很多,还有最大的噱头是实现了零配置,leader有一天就吩咐我说,有时间把我们的项目也升个级呗。好嘞。 1.x到2.x 这次升级跨度比较大,我们是从webpack1.x升级到4.x,因为1.x与2.x相差
推荐度:
导读webpack4的迁移的使用方法:感觉是突然之间,webpack4的消息就满天飞了,听说打包速度提高了很多,还有最大的噱头是实现了零配置,leader有一天就吩咐我说,有时间把我们的项目也升个级呗。好嘞。 1.x到2.x 这次升级跨度比较大,我们是从webpack1.x升级到4.x,因为1.x与2.x相差

感觉是突然之间,webpack4的消息就满天飞了,听说打包速度提高了很多,还有最大的噱头是实现了零配置,leader有一天就吩咐我说,有时间把我们的项目也升个级呗。好嘞。

1.x到2.x

这次升级跨度比较大,我们是从webpack1.x升级到4.x,因为1.x与2.x相差挺大,所以第一件事,就是先升到2.x,比较大的改动就是loader的配置方式

// 1.x
preLoaders: [
 {
 test: /\.vue$/,
 loader: 'eslint',
 exclude: /node_modules/
 }, {
 test: /\.js$/,
 loader: 'eslint',
 exclude: /node_modules/
 }
],
loaders: [
 { test: /\.vue$/, loader: 'vue' },
 { test: /\.json$/, loader: 'json' },
 { test: /\.html$/, loader: 'html' },
...
]
//2.x
module: {
 rules: [
 {
 test: /.vue$/,
 use: 'eslint-loader',
 enforce: 'pre', // 对应1.x的preLoaders
 exclude: /node_modules/
 }, {
 test: /.js$/,
 use: 'eslint-loader',
 enforce: 'pre',
 exclude: /node_modules/
 },
 { test: /\.vue$/, use: 'vue-loader' },
 { test: /\.json$/, use: 'json-loader' },
 { test: /\.html$/, use: 'html-loader' },
 ...
 ]
},

而且loader一定要写完整,vue-loader如果只写vue会报错。loader还可以通过options进行配置。

{
 loader: 'css-loader',
 options: {
 autoprefixer: false
 }
}

旧版的链式调用也用数组替代。

1.x

style!postcss!less

2.x

 use: [
 "style-loader",
 "css-loader",
 "less-loader"
 ]

webpack2.x默认支持es6的模块,所以在编译时候没有必要将它们先转换CommonJS模块再处理,babel-preset-es2015-webpack已经支持不转换模块中的importexport,只需要设置.babelrc

"presets": [
 ["es2015", { "modules": false }]
]

另外就是插件的升级,运行时哪个插件报错就升级哪个插件,屡试不爽。

2.x到4.x

第一步:版本升级

  1. 不再支持node 4,可以直接升级到8.x版本
  2. webpack升级
npm install webpack@4 --save

npm install webpack-cli --save // 不要忘记这一点,用来启动webpack的

插件升级,同理,哪个报错就升级哪个,除了html-webpack-plugin用下面的方法升级,原因是作者还未来得及升级

npm i webpack-contrib/html-webpack-plugin --save-dev

extract-text-webpack-plugin只有最新的beta版本才支持,所以npm install extract-text-webpack-plugin@next --save-dev

第二步 运行命令中添加 --mode development--mode production

PS:虽然说webpack 4是零配置,入口默认是src/index.js,出口是dist/,但由于项目是多页面的,所以这一步并没有省略,根据实际情况来。

第三步 移除CommonsChunkPlugin

//替代方案
module: {
 rules: [
 ...
 ]
},
optimization: {
 splitChunks: {
 chunks: "all", // 必须三选一:'initial' | 'all' | 'async'
 minSize: 0, 
 minChunks: 1,
 maxAsyncRequests: 1,
 maxInitialRequests: 1,
 name: () => {},
 cacheGroups: {
 vendor: {
 chunks: 'all',
 test: /node_modules/, // 正则规则验证,如果符合就提取chunks
 name: "vendor" // 要缓存的分割出来的chunk名称
 },
 default: {
 chunks: 'all',
 name: 'commons',
 reuseExistingChunks: true
 }
 }
 }
}

因为多个页面,所以结合了html-webpack-plugin

new HtmlWebpackPlugin({
 template: 'index.html',
 chunks: ['vendor', 'commons', 'index']
 })

刚开始一直出错,是因为我没有复写default,也没有default:false,所以其实默认配置有将所有的模块的公共部分分离到某个文件中,但我在HtmlWebpackPlugin中的chunks中又没有添加,所以要么覆写原来的默认配置,要么就关闭默认配置。

第四步:配置postcss autoprefixer

在根目录下创建一个文件`postcss.config.js`

module.exports = {
 plugins: [
 require('postcss-inline-svg')({
 removeFill: false
 }),
 require('postcss-pxtorem')({
 replace: process.env.NODE_ENV === 'production',
 rootValue: 750 / 16,
 minPixelValue: 1.1,
 propWhiteList: [],
 unitPrecision: 5
 }),
 require('autoprefixer')({browsers: ['iOS>7', 'Android>4']})
 ]
};

...
 {
 test: /\.(css|less)$/,
 use: ExtractTextPlugin.extract({
 fallback: 'style-loader',
 use:[{
 loader: 'css-loader',
 options: {
 autoprefixer: false
 }
 },
 {
 loader: 'postcss-loader',
 options: {
 sourceMap: true
 }
 },
 {
 loader: 'less-loader',
 options: {
 relativeUrls: true
 }
 }]
 })
 },
...

第五步:不需要UglifyJsPlugin插件

只需要设置optimization.minimize: true就行,production mode下面自动为true

以上只是在原有项目的基础上对webpack 4的升级,还有一些特性并没有用到,所以没有提及,比如sideEffectsjavascript/auto javascript/esm javascript/dynamicwebassembly/experimental等等,有机会再去探索。

文档

webpack4的迁移的使用方法

webpack4的迁移的使用方法:感觉是突然之间,webpack4的消息就满天飞了,听说打包速度提高了很多,还有最大的噱头是实现了零配置,leader有一天就吩咐我说,有时间把我们的项目也升个级呗。好嘞。 1.x到2.x 这次升级跨度比较大,我们是从webpack1.x升级到4.x,因为1.x与2.x相差
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top