webpack 3.X - 4.X 之 Big changes

所謂知己知彼百戰(zhàn)不殆,在升級(jí)前讓我們先了解下 webpack4 都做了哪些重大改變以及優(yōu)化吧。此處只針對(duì)我了解的對(duì)我有影響有聯(lián)系的進(jìn)行翻譯說明。更多詳細(xì)內(nèi)容參見 webpack4

白話說區(qū)別
  • 新增了 mode 參數(shù)來區(qū)分開發(fā)環(huán)境還是生產(chǎn)環(huán)境,開發(fā)環(huán)境側(cè)重于構(gòu)建的速度,生產(chǎn)環(huán)境側(cè)重于打包后的文件大小
    在開發(fā)環(huán)境中,我們更注重的是如何及時(shí)快速的將更新的代碼展示在網(wǎng)頁上,如何快速定位錯(cuò)誤,因此webpack提供了強(qiáng)效source-map和模塊熱更新的機(jī)制來幫助開發(fā)人員。在生產(chǎn)環(huán)境中,我們需要的是如何讓代碼包更小、構(gòu)建更迅速,因此有了輕量級(jí)source-map,css代碼壓縮工具,tree shaking配和js壓縮工具等等,都是為了讓最后打包出來的代碼體量更小。 同樣在項(xiàng)目較為復(fù)雜的時(shí)候也需要將代碼進(jìn)行分包處理,使用異步加載,進(jìn)一步提高用戶使用時(shí)的加載速度,同樣為了彌補(bǔ)webpack在node中也是單線程加載的原因,還提供了HappyPack,使得webpack能夠并行加載。
  • 移除 loaders,必須使用 rules ( 在 3 版本的時(shí)候 loaders 和 rules 是共存的但是到4的時(shí)候只允許使用rules )
  • 移除了 CommonsChunkPlugin (提取公共代碼),用 optimization.splitChunks 和 optimization.runtimeChunk 來代替
  • 支持 es6 的方式導(dǎo)入 JSON 文件,并且可以過濾無用的代碼
  • ExtractTextWebpackPlugin 調(diào)整,建議選用新的 CSS 文件提取插件 mini-css-extract-plugin,production 模式,增加 minimizer
官方說區(qū)別如下
Big changes
  • Environment - 環(huán)境
    Node.js 4 is no longer supported. Source Code was upgraded to a higher ecmascript version.
    不再支持 Node.js 4。 源碼升級(jí)到 ecmascript 的更高版本。
  • Usage - 用法
    You have to choose (mode or --mode) between two modes now: production or development
    必須選擇( mode 或 --mode )一個(gè)模式: 'development' 或 'production' 。
  • Syntax - 語法
    import() always returns a namespace object. CommonJS modules are wrapped into the default export
    import() 總是返回一個(gè)對(duì)象。CommonJS 模塊會(huì)被封裝在 default 屬性中。也就是說之前的 import 寫法在升級(jí) webpack4 之后可能導(dǎo)致不兼容。
  • Configuration - 配置
    不再需要以下插件:
    1、NoEmitOnErrorsPlugin- > optimization.noEmitOnErrors(默認(rèn)情況下在生產(chǎn)模式下啟用)
    2、ModuleConcatenationPlugin- > optimization.concatenateModules(默認(rèn)情況下在生產(chǎn)模式下啟用)
    3、NamedModulesPlugin- > optimization.namedModules(默認(rèn)情況下在開發(fā)模式下啟用)
    4、CommonsChunkPlugin 被移除掉換成 - > optimization.splitChunks,optimization.runtimeChunk 來配置
  • JSON
  • Optimization 優(yōu)化
Big features
  • Modules 模塊
  • Optimization 優(yōu)化
    sideEffects: false is now supported in package.json
    現(xiàn)在在 package.json 中支持 sideEffects 特性,它可以為 tree-shaking 提供更大的優(yōu)化空間。
  • Syntax 語法
  • Configuration 配置
    optimization.minimize has been added to switch minimizing on/off
    optimization.minimize 可以控制是否壓縮
    By default: on in production mode, off in development mode
    默認(rèn)生產(chǎn)環(huán)境壓縮,開發(fā)環(huán)境不壓縮。
  • 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
    生效了一些插件選項(xiàng),必須安裝 webpack-cli 來使用CLI,--progress 可以顯示插件名稱
  • Performance 性能
    UglifyJs now caches and parallizes by default
    UglifyJs 默認(rèn)緩存和并行,多項(xiàng)優(yōu)化。
  • Stats 統(tǒng)計(jì)
Features
  • Configuration 配置
    sideEffects can be overriden via module.rules
    sideEffects 可以通過 module.rules 覆蓋
  • Runtime 運(yùn)行
  • Devtool 開發(fā)工具
  • 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
    默認(rèn)情況下,使用更快的md4哈希
  • Optimization 優(yōu)化
    When using more than 25 exports mangled export names are shorter.
    當(dāng)使用超過25個(gè)名稱導(dǎo)出,名字會(huì)壓縮的更短
  • Defaults 默認(rèn)
    1、output.pathinfo is now on by default in develoment mode
    output.pathinfo 默認(rèn)為開發(fā)模式
    2、in-memory caching is now off by default in production
    默認(rèn)在生產(chǎn)環(huán)境關(guān)閉緩存
    3、entry defaults to ./src
    入口默認(rèn)為 ./src
    4、output.path defaults to ./dist
    出口默認(rèn)為 ./dist
    5、Use production defaults when omiting the mode option
    在沒有設(shè)置 mode 屬性時(shí)默認(rèn)為生產(chǎn)環(huán)境
  • Usage 用法
  • Stats 統(tǒng)計(jì)
  • Plugins 插件
    done is now an async hook
    done 現(xiàn)在是一個(gè)異步鉤子
Bugfixes

bug修復(fù)

Internal changes

內(nèi)部進(jìn)行了許多優(yōu)化

Removed features

移除下述插件、模塊、屬性
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 的變化,原文有很多可點(diǎn)上方連接自行查閱

  • map/foreach Chunks/Modules/Parents methods are now deprecated/removed
    map/foreach Chunks/Modules/Parents 方法現(xiàn)已棄用/刪除
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 很多人都說webpack復(fù)雜,難以理解,很大一部分原因是webpack是基于配置的,可配置項(xiàng)很多,并且每個(gè)參數(shù)傳入...
    little_short閱讀 6,700評(píng)論 1 4
  • webpack是一個(gè)現(xiàn)代JavaScript應(yīng)用程序的靜態(tài)模塊打包工具。當(dāng)webpack處理應(yīng)用程序時(shí),會(huì)在內(nèi)部構(gòu)...
    摸爬打滾閱讀 3,829評(píng)論 0 14
  • 中文翻譯 ng help ng build 構(gòu)建您的應(yīng)用程序并將其放入輸出路徑(dist /默認(rèn)情況下)。 別名:...
    4ea0af17fd67閱讀 2,150評(píng)論 0 0
  • Webpack 4.0發(fā)布了!??! 前端界最流行的模塊管理庫webpack又更新了一個(gè)大版本?。?! 讓我們看看這次...
    bcb84a30ed08閱讀 8,355評(píng)論 8 23
  • 熟悉 webpack 與 webpack4 配置。 webpack4 相對(duì)于 3 的最主要的區(qū)別是所謂的零配置,但...
    yichen_china閱讀 1,489評(píng)論 0 3

友情鏈接更多精彩內(nèi)容