webpack4的迁移的使用方法

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

1.x到2.x

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

rush:js;"> // 1.x preLoaders: [ { test: /\.vue$/,loader: 'eslint',exclude: /node_modules/ },{ test: /\.js$/,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$/,exclude: /node_modules/ },{ test: /\.vue$/,use: 'vue-loader' },use: 'json-loader' },use: 'html-loader' },... ] },

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

rush:js;"> { loader: 'css-loader',options: { autoprefixer: false } }

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

1.x

rush:plain;"> style!postcss!less

2.x

rush:plain;"> use: [ "style-loader","css-loader","less-loader" ]

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

rush:plain;"> "presets": [ ["es2015",{ "modules": false }] ]

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

2.x到4.x

第一步:版本升级

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

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

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

rush:bash;"> 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

{},cacheGroups: { vendor: { chunks: 'all',test: /node_modules/,// 正则规则验证,如果符合就提取chunks name: "vendor" // 要缓存的分割出来的chunk名称 },default: { chunks: 'all',name: 'commons',reuseExistingChunks: true } } } }

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

rush:js;"> new HtmlWebpackPlugin({ template: 'index.html',chunks: ['vendor','commons','index'] })

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

第四步:配置postcss autoprefixer

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

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等等,有机会再去探索。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...