webpack 3.X - 4.X 之 Big changes

所谓知己知彼百战不殆,在升级前让我们先了解下 webpack4 都做了哪些重大改变以及优化吧。此处只针对我了解的对我有影响有联系的进行翻译说明。更多详细内容参见 webpack4

白话说区别
  • 新增了 mode 参数来区分开发环境还是生产环境,开发环境侧重于构建的速度,生产环境侧重于打包后的文件大小
    在开发环境中,我们更注重的是如何及时快速的将更新的代码展示在网页上,如何快速定位错误,因此webpack提供了强效source-map和??槿雀碌幕评窗镏⑷嗽?。在生产环境中,我们需要的是如何让代码包更小、构建更迅速,因此有了轻量级source-map,css代码压缩工具,tree shaking配和js压缩工具等等,都是为了让最后打包出来的代码体量更小。 同样在项目较为复杂的时候也需要将代码进行分包处理,使用异步加载,进一步提高用户使用时的加载速度,同样为了弥补webpack在node中也是单线程加载的原因,还提供了HappyPack,使得webpack能够并行加载。
  • 移除 loaders,必须使用 rules ( 在 3 版本的时候 loaders 和 rules 是共存的但是到4的时候只允许使用rules )
  • 移除了 CommonsChunkPlugin (提取公共代码),用 optimization.splitChunks 和 optimization.runtimeChunk 来代替
  • 支持 es6 的方式导入 JSON 文件,并且可以过滤无用的代码
  • ExtractTextWebpackPlugin 调整,建议选用新的 CSS 文件提取插件 mini-css-extract-plugin,production 模式,增加 minimizer
官方说区别如下
Big changes
  • Environment - 环境
    Node.js 4 is no longer supported. Source Code was upgraded to a higher ecmascript version.
    不再支持 Node.js 4。 源码升级到 ecmascript 的更高版本。
  • Usage - 用法
    You have to choose (mode or --mode) between two modes now: production or development
    必须选择( mode 或 --mode )一个模式: 'development' 或 'production' 。
  • Syntax - 语法
    import() always returns a namespace object. CommonJS modules are wrapped into the default export
    import() 总是返回一个对象。CommonJS 模块会被封装在 default 属性中。也就是说之前的 import 写法在升级 webpack4 之后可能导致不兼容。
  • Configuration - 配置
    不再需要以下插件:
    1、NoEmitOnErrorsPlugin- > optimization.noEmitOnErrors(默认情况下在生产模式下启用)
    2、ModuleConcatenationPlugin- > optimization.concatenateModules(默认情况下在生产模式下启用)
    3、NamedModulesPlugin- > optimization.namedModules(默认情况下在开发模式下启用)
    4、CommonsChunkPlugin 被移除掉换成 - > optimization.splitChunks,optimization.runtimeChunk 来配置
  • JSON
  • Optimization 优化
Big features
  • Modules ???/li>
  • Optimization 优化
    sideEffects: false is now supported in package.json
    现在在 package.json 中支持 sideEffects 特性,它可以为 tree-shaking 提供更大的优化空间。
  • Syntax 语法
  • Configuration 配置
    optimization.minimize has been added to switch minimizing on/off
    optimization.minimize 可以控制是否压缩
    By default: on in production mode, off in development mode
    默认生产环境压缩,开发环境不压缩。
  • Usage 用法
    Some Plugin options are now validated
    CLI has been move to webpack-cli, you need to install webpack-cli to use the CLI
    The ProgressPlugin (--progress) now displays plugin names
    生效了一些插件选项,必须安装 webpack-cli 来使用CLI,--progress 可以显示插件名称
  • Performance 性能
    UglifyJs now caches and parallizes by default
    UglifyJs 默认缓存和并行,多项优化。
  • Stats 统计
Features
  • Configuration 配置
    sideEffects can be overriden via module.rules
    sideEffects 可以通过 module.rules 覆盖
  • Runtime 运行
  • Devtool 开发工具
  • Performance 性能
    1、webpacks AST can be passed directly from loader to webpack to avoid extra parsing
    webpacks AST可以直接从loader传递给webpack,以避免额外的解析
    2、Use faster md4 hash for hashing by default
    默认情况下,使用更快的md4哈希
  • Optimization 优化
    When using more than 25 exports mangled export names are shorter.
    当使用超过25个名称导出,名字会压缩的更短
  • Defaults 默认
    1、output.pathinfo is now on by default in develoment mode
    output.pathinfo 默认为开发模式
    2、in-memory caching is now off by default in production
    默认在生产环境关闭缓存
    3、entry defaults to ./src
    入口默认为 ./src
    4、output.path defaults to ./dist
    出口默认为 ./dist
    5、Use production defaults when omiting the mode option
    在没有设置 mode 属性时默认为生产环境
  • Usage 用法
  • Stats 统计
  • Plugins 插件
    done is now an async hook
    done 现在是一个异步钩子
Bugfixes

bug修复

Internal changes

内部进行了许多优化

Removed features

移除下述插件、??椤⑹粜?br> removed module.loaders
removed loaderContext.options
removed Compilation.notCacheable flag
removed NoErrorsPlugin
removed Dependency.isEqualResource
removed NewWatchingPlugin
removed CommonsChunkPlugin

Breaking changes for plugins/loaders

loader 和 plugin 的变化,原文有很多可点上方连接自行查阅

  • map/foreach Chunks/Modules/Parents methods are now deprecated/removed
    map/foreach Chunks/Modules/Parents 方法现已弃用/删除
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • 很多人都说webpack复杂,难以理解,很大一部分原因是webpack是基于配置的,可配置项很多,并且每个参数传入...
    little_short阅读 6,535评论 1 4
  • webpack是一个现代JavaScript应用程序的静态模块打包工具。当webpack处理应用程序时,会在内部构...
    摸爬打滚阅读 3,284评论 0 14
  • 中文翻译 ng help ng build 构建您的应用程序并将其放入输出路径(dist /默认情况下)。 别名:...
    4ea0af17fd67阅读 2,027评论 0 0
  • Webpack 4.0发布了?。?! 前端界最流行的模块管理库webpack又更新了一个大版本?。。?让我们看看这次...
    bcb84a30ed08阅读 8,233评论 8 23
  • 熟悉 webpack 与 webpack4 配置。 webpack4 相对于 3 的最主要的区别是所谓的零配置,但...
    yichen_china阅读 1,404评论 0 3