之前看到各大公众号都在狂推 webpack 新版发布的相关内容,之前就尝试了升级,由于部分插件的原因,未能成功,现在想必过了这么久已经可以了,今天就来试一下在我的项目中升级会遇到哪些坑。
查阅更新日志
在安装更新之前,先大致浏览了一下更新日志,对大部分用户来说迁移上需要注意的应该就是这些点:
- 在命令行界面运行打包指令需要安装
webpack-cli
; - 打包需要指定打包模式
production
ordevelopment
,在不同模式下会添加不同的默认配置,webpack.DefinePlugin
插件的process.env.NODE_ENV
的值不需要再定义,将根据模式自动添加; - 不再需要在
plugin
中设置new webpack.optimize.UglifyJsPlugin
,只需要在配置中设置开关即可,并且production
模式自动开启,可以通过optimization.minimizer
指定其他压缩库; - 删除了
CommonsChunkPlugin
,功能已迁移至optimization.splitChunks ,
optimization.runtimeChunk
。
迁移
- 安装最新的
webpack
、webpack-cli
、webpack-dev-server
; - 为开发中和发布分别配置
mode
,删除webpack.DefinePlugin
配置,并且去掉package.json
中启动脚本的NODE_ENV
区别环境变量定义; - 去掉
new webpack.optimize.UglifyJsPlugin
、ModuleConcatenationPlugin
配置。
爬坑
在这些配置好之后我遇到的第一个问题就是打包时 extract-text-webpack-plugin
插件炸了!这里提供了这里有两种解决方案:
- 方法一:安装指定
extract-text-webpack-plugin
版本@next
; - 方法二:使用
mini-css-extract-plugin
替代。
如果使用方法二注意在发布打包时需要指定 css 压缩库配置,并且需要同时写入 js 压缩库,因为你一旦指定了 optimization.minimizer
就会弃用内置的代码压缩:
/* webpack.config.js */ const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = () => { const config = { module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader"color: #ff0000">最后总体来说现在的升级时机已经成熟,大多需要用到的功能和插件都有平滑的升级或替代方案,建议在开始升级前安装最新发布的插件版本,也可以参考下我的项目配置react-with-mobx-template。
还有对插件的一些 API 也做了一些更改,如果你是插件开发者也可以尝试发布新的插件版本,我在使用自己的版本号提取插件webpack-version-plugin时发现
compiler.plugin
已经被提示过气了,webpack@v4
使用最新的compiler.hooks.emit.tap
触发事件,嗯,最后的这部分广告真硬!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。