时间:2021-05-26
感觉是突然之间,webpack4的消息就满天飞了,听说打包速度提高了很多,还有最大的噱头是实现了零配置,leader有一天就吩咐我说,有时间把我们的项目也升个级呗。好嘞。
1.x到2.x
这次升级跨度比较大,我们是从webpack1.x升级到4.x,因为1.x与2.x相差挺大,所以第一件事,就是先升到2.x,比较大的改动就是loader的配置方式
// 1.xpreLoaders: [ { 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.xmodule: { 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
2.x
webpack2.x默认支持es6的模块,所以在编译时候没有必要将它们先转换CommonJS模块再处理,babel-preset-es2015-webpack已经支持不转换模块中的import和export,只需要设置.babelrc
"presets": [ ["es2015", { "modules": false }]]另外就是插件的升级,运行时哪个插件报错就升级哪个插件,屡试不爽。
2.x到4.x
第一步:版本升级
插件升级,同理,哪个报错就升级哪个,除了html-webpack-plugin用下面的方法升级,原因是作者还未来得及升级
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`
第五步:不需要UglifyJsPlugin插件
只需要设置optimization.minimize: true就行,production mode下面自动为true
以上只是在原有项目的基础上对webpack 4的升级,还有一些特性并没有用到,所以没有提及,比如sideEffects、javascript/auto javascript/esm javascript/dynamic、webassembly/experimental等等,有机会再去探索。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
好久不看webpack已经从3到4了,其实很早到今年2月份就开始发布webpack4的beta版本;每一次webpack的升级都还是建议阅读下《webpack4
最近使用webpack4配置ssr环境,发现的问题:ReferenceError:documentisnotdefined本次package.json使用版本信
webpack@4.x的变化先来说下webpack4和之前版本里一些主要的变化:1、webpack不再支持nodev4,这是因为新的webpack和附属插件使用
前言最近新起了一个多页项目,之前都未使用webpack4,于是准备上手实践一下。这篇文章主要就是一些配置介绍,对于正准备使用webpack4的同学,可以做一些参
前言:webpack4出了以后,一些插件变化很大,和之前的版本使用方式不一样,新手入坑,本篇将介绍如何从一开始配置webpack4的开发版本,对css,js进行