之前看到各大公众号都在狂推webpack新版发布的相关内容,之前就尝试了升级,由于部分插件的原因,未能成功,现在想必过了这么久已经可以了,今天就来试一下在我的项目中升级会遇到哪些坑。
<强>查阅更新日志强>
在安装更新之前,先大致浏览了一下更新日志,对大部分用户来说迁移上需要注意的应该就是这些点:
-
<李>在命令行界面运行打包指令需要安装<代码> webpack-cli> 代码;李>
<李>打包需要指定打包模式<代码> 代码>或<代码>开发生产> 代码,在不同模式下会添加不同的默认配置,<代码> webpack。DefinePlugin> 代码插件的<代码> process.env。NODE_ENV> 代码的值不需要再定义,将根据模式自动添加;李>
<李>不再需要在<代码>插件> 代码中设置新webpack.optimize <代码>。UglifyJsPlugin> 代码,只需要在配置中设置开关即可,并且<代码> 代码>生产模式自动开启,可以通过<代码>优化。最小值> 代码指定其他压缩库;李>
<李>删除了<代码> CommonsChunkPlugin> 代码,功能已迁移至<代码>优化。splitChunks, 代码> <代码> optimization.runtimeChunk> 代码。李>
<>强迁移强>
-
<李>安装最新的<代码> webpack 代码>,<代码> webpack-cli 代码>,<代码> webpack-dev-server> 代码;李>
<李>为开发中和发布分别配置<代码>模式> 代码,删除<代码> webpack。DefinePlugin> 代码配置,并且去掉<代码>包。json代码>中启动脚本的<代码> NODE_ENV> 代码区别环境变量定义;李>
<李>去掉新webpack.optimize <代码>。UglifyJsPlugin 代码>,<代码> ModuleConcatenationPlugin> 代码配置。李>
<强>爬坑强>
在这些配置好之后我遇到的第一个问题就是打包时<代码> extract-text-webpack-plugin> 代码插件炸了!这里提供了这里有两种解决方案:
-
<李>方法一:安装指定<代码> extract-text-webpack-plugin> 代码版本<代码> @next> 代码;李>
<李>方法二:使用<代码> mini-css-extract-plugin> 代码替代。李>
如果使用方法二注意在发布打包时需要指定css压缩库配置,并且需要同时写入js压缩库,因为你一旦指定了<代码>优化。最小值> 代码就会弃用内置的代码压缩:
/* webpack.config。js */const MiniCssExtractPlugin=要求(“mini-css-extract-plugin”); 模块。出口=()=比;{ 常量配置={ 模块:{ 规则:[ { 测试:/\ . css/美元, 用途:[ MiniCssExtractPlugin.loader, “css-loader& # 63; importLoaders=1”, “postcss-loader” ] }, { 测试:/\ .less/美元, 用途:[ MiniCssExtractPlugin.loader, “css-loader& # 63; importLoaders=1”, “postcss-loader”, “less-loader” ] } ] }, 解决:{ 扩展:['。js ', '。jsx”、“.less '] } }; 如果(process.env。NODE_ENV==='发展'){ config.module.rules [0] .use=[ “css-hot-loader”, MiniCssExtractPlugin.loader, “css-loader& # 63; importLoaders=1”, “postcss-loader” ]; config.module.rules [1] .use=[ “css-hot-loader”, MiniCssExtractPlugin.loader, “css-loader& # 63; importLoaders=1”, “postcss-loader”, { 装载机:“less-loader”, 选择:{ modifyVars:主题 } } ]; } 返回配置; };/* webpack.config.prod。js */常量合并=要求(“webpack-merge”); const UglifyJsPlugin=要求(“uglifyjs-webpack-plugin”); const MiniCssExtractPlugin=要求(“mini-css-extract-plugin”); const OptimizeCSSAssetsPlugin=要求(“optimize-css-assets-webpack-plugin”); const webpackBaseConfig=要求(“。/webpack.config”) (); 模块。出口=合并(webpackBaseConfig, { 模式:“生产”, 优化:{ 最小值:[ 新UglifyJsPlugin ({ 缓存:没错, 并行:没错, uglifyOptions: { 压缩:{ 警告:假的, drop_debugger:没错, drop_console:假 } } }), 新OptimizeCSSAssetsPlugin ({}) ] }, 插件:[ 新MiniCssExtractPlugin ({ 文件名:“css/[名字]. css” }) ] });
<代码> happypack 代码>炸了,小场面,升级就好<代码> @5.0.0-beta。> 3