webpack4.0 抽取公共代碼

這里對“公共代碼”的解釋是,再有多個(gè)入口時(shí),抽離兩個(gè)入口共有的依賴,將這些公共的部分單獨(dú)打包
現(xiàn)在來模擬上述情況,新建a.js, b.js, other.js, index.js和other.js都引用a和b

//a.js
console.log("a~~~~~~~~~~~");
//b.js
console.log("b~~~~~~~~~~~");
//index.js, other.js(方便模擬,這倆個(gè)文件代碼一樣)
import "./a.js";
import "./b.js";
console.log("這是index.js"); // console.log("這是other.js");

打包:

1967135-9ecbec02a4970095.png

生成的index和other也分別把a(bǔ)和b打包在了各自體內(nèi),這樣很浪費(fèi)資源。webpack中的optimization字段中提供了splitChunks字段,就是為了抽離公共代碼

// webpack.config.js
optimization: {
    minimizer: [
      ....
    ]
    splitChunks: {
      // 分割代碼塊(多頁應(yīng)用才會用到)
      cacheGroups: {
        //緩存組
        common: {
          // 公共的模塊
          chunks: "initial", // 從開始處抽離,有多種配置,像異步模塊什么的
          minSize: 0, // 最小大小
          minChunks: 2 //  引用次數(shù)
        }
      }
    }
  },

如果還要抽離第三方模塊

optimization: {
    minimizer: [
      ...
    ]
    splitChunks: {
      // 分割代碼塊(多頁應(yīng)用才會用到)
      cacheGroups: {
        //緩存組
        common: {
          // 公共的模塊
          chunks: "initial", // 從開始處抽離,有多種配置,像異步模塊什么的
          minSize: 0, // 最小大小
          minChunks: 2 //  引用次數(shù)
        },
        vendor: {  // 此處為了抽離第三方的公共模塊,比如jquery(前提是index和other都引入jquery了)
          priority: 1,  //權(quán)重, 如果不給這個(gè)字段,那么就此例來說,會先走上邊的“common”,會把jquery和a.js,b.js合并在一個(gè)文件中。
                        //如果還有別的入口只使用jquery了,但是a和b對于它來說就是無用的。加上權(quán)重之后,會將第三方模塊單獨(dú)抽離
          test: /node_modules/,
          minSize: 0, // 最小大小
          chunks: "initial",
          minChunks: 2 //  引用次數(shù)
        }
      }
    }
  },

打包后:

1967135-ef2ede585e7b6dea.png

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

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

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