webpack4 optimization總結

optimization總結

minimize

默認爲true,效果就是壓縮js代碼。css

minimizer

能夠自定義UglifyJsPlugin和一些配置,默認的壓縮爲uglifyjs-webpack-pluginvue

//好比在構建的時候,但願新增css的壓縮
minimizer:
  mode === "development"
    ? []
    : [
        new UglifyJsPlugin({
          cache: true,
          parallel: true,
          sourceMap: mode === "development"
        }),
        new OptimizeCSSAssetsPlugin()
      ]

runtimeChunk

默認爲false,runtime相關的代碼(各個模塊之間的引用和加載的邏輯)內嵌入每一個entrynode

true:對於每一個entry會生成runtime~${entrypoint.name}的文件。

clipboard.png

'single': 會生成一個惟一單獨的runtime.js文件,就是manifest

clipboard.png

multiple:和true一致。
name:{}:自定義runtime文件的name

clipboard.png

clipboard.png

noEmitOnErrors

默認爲true,編譯錯誤的時候是否不生成資源。webpack

namedModules,namedChunks

development默認都爲true,production默認爲false,選擇是否給modulechunk更有意義的名稱。web

nameModules:true這裏會顯示路徑vue-cli

clipboard.png

nameModules:false直接採用索引自增緩存

clipboard.png

namedChunks:true異步

clipboard.png

namedChunks:false採用索引async

clipboard.png

moduleIds

通常不建議配置namedModules,namedChunks
針對module的配置,這裏會取hashed優化

clipboard.png

針對chunk的配置,特別是異步代碼通常會採用@vue-cli3推薦的插件

clipboard.png

removeAvailableModules,removeEmptyChunks,mergeDuplicateChunks,flagIncludedChunks

這4個參數構建默認都是true,主要是用於構建優化,不須要改,基本就是字面意思。

splitChunks

主要就是根據不一樣的策略來分割打包出來的bundle
默認配置:

clipboard.png

1.chunks

clipboard.png

async(默認)

splitChunks:{
   chunks:'async'//分割異步打包的代碼,
}

打包出b和vue兩個chunk。

clipboard.png

all:

splitChunks:{
   chunks:'all',//同時分割同步和異步代碼,推薦。
   cacheGroup:{//默認的規則不會打包,須要單獨定義
     a: {
       test: /a\.js/,
       chunks: "all",
       name: "a",
       enforce: true
     }
   }
}

clipboard.png

initial

splitChunks:{
   chunks:'initial'//也會同時打包同步和異步,可是異步內部的引入再也不考慮,直接打包在一塊兒,會將vue和b的內容直接打包成chunk,
   cacheGroup:{//默認的規則不會打包,須要單獨定義
     a: {
       test: /a\.js/,
       chunks: "all",
       name: "a",
       enforce: true
     }
   }
}

clipboard.png

2.name
分割的js名稱,默認爲true,返回
${cacheGroup的key} ${automaticNameDelimiter} ${moduleName},能夠自定義。

3.minChunks
最小公用模塊次數,默認爲1

4.minSize,maxSize,maxAsyncRequests(按需加載時候最大的並行請求數),maxInitialRequests(一個入口最大的並行請求數)
都爲字面意思,通常不建議改。

5.cacheGroups
緩存策略,默認設置了分割node_modules和公用模塊。內部的參數能夠和覆蓋外部的參數。
test 正則匹配文件
priority 優先級
reuseExistingChunk是否複用存在的chunk

cacheGroup:{
     a: {
       test: /a\.js/,//匹配規則
       minChunks:2,//重寫公用chunks的次數
       chunks: "all",
       name: "a",//重寫文件名稱
       enforce: true //強制生成
     }
   }

6.automaticNameDelimiter
文件名稱分隔符號~

相關文章
相關標籤/搜索