时间:2021-05-26
之前看到各大公众号都在狂推 webpack 新版发布的相关内容,之前就尝试了升级,由于部分插件的原因,未能成功,现在想必过了这么久已经可以了,今天就来试一下在我的项目中升级会遇到哪些坑。
查阅更新日志
在安装更新之前,先大致浏览了一下更新日志,对大部分用户来说迁移上需要注意的应该就是这些点:
迁移
爬坑
在这些配置好之后我遇到的第一个问题就是打包时 extract-text-webpack-plugin 插件炸了!这里提供了这里有两种解决方案:
如果使用方法二注意在发布打包时需要指定 css 压缩库配置,并且需要同时写入 js 压缩库,因为你一旦指定了 optimization.minimizer 就会弃用内置的代码压缩:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = () => { const config = { module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader?importLoaders=1', 'postcss-loader' ] }, { test: /\.less$/, use: [ MiniCssExtractPlugin.loader, 'css-loader?importLoaders=1', 'postcss-loader', 'less-loader' ] } ] }, resolve: { extensions: ['.js', '.jsx', '.less'] } }; if (process.env.NODE_ENV === 'development') { config.module.rules[0].use = [ 'css-hot-loader', MiniCssExtractPlugin.loader, 'css-loader?importLoaders=1', 'postcss-loader' ]; config.module.rules[1].use = [ 'css-hot-loader', MiniCssExtractPlugin.loader, 'css-loader?importLoaders=1', 'postcss-loader', { loader: 'less-loader', options: { modifyVars: theme } } ]; } return config;};const merge = require('webpack-merge');const UglifyJsPlugin = require('uglifyjs-webpack-plugin');const MiniCssExtractPlugin = require('mini-css-extract-plugin');const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');const webpackBaseConfig = require('./webpack.config')();module.exports = merge(webpackBaseConfig, { mode: 'production', optimization: { minimizer: [ new UglifyJsPlugin({ cache: true, parallel: true, uglifyOptions: { compress: { warnings: false, drop_debugger: true, drop_console: false } } }), new OptimizeCSSAssetsPlugin({}) ] }, plugins: [ new MiniCssExtractPlugin({ filename: 'css/[name].css' }) ]});happypack 炸了,小场面,升级就好 @5.0.0-beta.3(happypack 和 extract-text-webpack-plugin 搭配使用更佳,mini-css-extract-plugin 未测试)。webpack-browser-plugin 炸了,小场面,弃用就好,然后在 devServer 中配置 open 和 openPage 。
上面的配置中可以看到我使用判断语句 process.env.NODE_ENV === 'development' 在开发配置中加入了 css-hot-loader ,但是这里实际上是获取到的是 undefined ,咦?这是什么鬼?查阅更新日志是怎么说的:
process.env.NODE_ENV are set to production or development (only in built code, not in config)意思就是说我们在使用的工程项目代码中会获取到这个变量,但是打包配置中使用这个变量还是获取不到的,我也实际验证了这个结果,so,我在 package.json 的开发启动脚本中还是加上了 NODE_ENV='development' 。
最后
总体来说现在的升级时机已经成熟,大多需要用到的功能和插件都有平滑的升级或替代方案,建议在开始升级前安装最新发布的插件版本,也可以参考下我的项目配置react-with-mobx-template。
还有对插件的一些 API 也做了一些更改,如果你是插件开发者也可以尝试发布新的插件版本,我在使用自己的版本号提取插件webpack-version-plugin时发现 compiler.plugin 已经被提示过气了, webpack@v4 使用最新的 compiler.hooks.emit.tap 触发事件,嗯,最后的这部分广告真硬!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.webpack3.11升级4.26为了提升打包效率,在webpack3.11基础之上做了升级,webpack4.0发布以来,零配置的webpack对项目本身
这两天一直在练习这个webpack4,发现有好多问题和坑,做开发嘛,一定要有喜欢出问题并喜欢解决问题,坚决踩个坑填个坑的不怕死小强精神!webpack4在配置上
最近由于项目需要,需要对已有的两个vue项目进行webpack3升级到webpack4,此处记录一下整个升级过程的几个重要步骤,以及遇到的问题和解决方案。1、更
不久前写了一篇webpack4升级迁移这里简单说下React项目的一些配置;首先我们新建项目react-web,然后进入项目初始化package.json;cd
很多果粉在问iphone4升级ios7.1正式版怎么样?卡不卡?下文将告诉大家iphone4升级ios7使用效果怎么样,苹果iphone4是支持ios7.1