Webpack-CommonsChunkPlugin

當(dāng)前項(xiàng)目結(jié)構(gòu)

項(xiàng)目結(jié)構(gòu)

其中

  • Greeter.js 引用了 config.json
  • main.js 和 second.js 都引用了 Greeter.js
  • main.js 還引用了 onlyformain.js
  • second.js 還引用了 onlyforsecond.js

代碼如下

// config.json
{
  "greetText": "Hi there and greetings from JSON!"
}

// Greeter.js
var config = require('./config.json');
module.exports = function() {
  var greet = document.createElement('div');
  greet.textContent = config.greetText;
  greet.innerText = config.greetText;
  console.log(config.greetText)
  return greet;
};

// main.js
import 'babel-polyfill'
import './OnlyForMain'
var greeter = require("./Greeter.js")
document.getElementById('root').appendChild(greeter());
console.log("this is from main.js")

// second.js
import 'babel-polyfill'
import './OnlyForSecond'
var greeter = require("./Greeter.js")
document.getElementById('root').appendChild(greeter());
console.log("this is from second.js")

// onlyformain.js
var config = require('./config.json');
module.exports = function() {
  console.log("this is only for main")
  return {};
};

// onlyforsecond.js
var config = require('./config.json');
module.exports = function() {
  console.log("this is only for second")
  return {};
};

webpack 配置

Paste_Image.png

當(dāng)配置 commonChunkPlugin 參數(shù),結(jié)果如下:

Case 1

Paste_Image.png

命令行

Paste_Image.png

打包后


沒(méi)有后綴

Case2

Paste_Image.png

命令行

Paste_Image.png

提出了公共js - init.js

Case3

Paste_Image.png

命令行

Paste_Image.png

Case4

Paste_Image.png

命令行

4

**assert 名稱(chēng) 和 chunk 名稱(chēng) 不一樣了 **

Case5

5

命令行

Paste_Image.png

Case6

Paste_Image.png

命令行

Paste_Image.png

此時(shí)common.js中僅僅有module-require函數(shù)

Case7

Paste_Image.png

命令行

Paste_Image.png

此時(shí)common.js提取出了config.json和Greeter.js

Case8

Paste_Image.png

命令行

Paste_Image.png

common.js提取出了所有的js,此時(shí) main.js 和 second.js中的代碼僅有一行

webpackJsonp([0,1],[]);

Case9

Paste_Image.png

命令行

Paste_Image.png

**僅僅提出了 module-require 公共部分 ,其他公共模塊并不抽取 **

Case 10

Paste_Image.png

命令行

Paste_Image.png

Case11

Paste_Image.png

命令行

Paste_Image.png

總結(jié)

CommonsChunkPlugin

options.name或options.names(string | string []):公共塊的塊名稱(chēng)。 可以通過(guò)傳遞現(xiàn)有塊的名稱(chēng)來(lái)選擇現(xiàn)有塊。 如果傳遞一個(gè)字符串?dāng)?shù)組,這等于為每個(gè)塊名稱(chēng)多次調(diào)用插件。 如果省略并且options.async或options.children設(shè)置為所有塊,則使用options.filename作為塊名。

options.filename(string):公共塊的文件名模板。 可以包含與output.filename相同的占位符。 如果省略,原始文件名不會(huì)被修改(通常為output.filename或output.chunkFilename)。

options.minChunks(number | Infinity | function(module,count) - > boolean):在移動(dòng)到公共塊之前需要包含一個(gè)模塊的塊的最小數(shù)量。 該數(shù)字必須大于或等于2且小于或等于塊的數(shù)量。 傳遞無(wú)限只是創(chuàng)建公共塊,但不移動(dòng)模塊。 通過(guò)提供一個(gè)函數(shù),你可以添加自定義邏輯。 (默認(rèn)為塊的數(shù)量)

options.chunks(string []):按塊名稱(chēng)選擇源塊。 塊必須是公共塊的子節(jié)點(diǎn)。 如果省略,則選擇所有條目塊。

options.children(boolean):如果true,則選擇公共塊的所有子節(jié)點(diǎn)

options.async(boolean | string):如果為true,將創(chuàng)建一個(gè)新的異步公共塊作為options.name的子節(jié)點(diǎn)和options.chunks的子節(jié)點(diǎn)。 它與options.chunks并行加載。 可以通過(guò)提供所需的字符串而不是true來(lái)更改輸出文件的名稱(chēng)。

options.minSize(number):創(chuàng)建公共塊之前所有公共模塊的最小大小。

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 官方文檔: CommonsChunkPlugin options.name or options.names (s...
    yiludege閱讀 1,327評(píng)論 0 2
  • 1.demo結(jié)構(gòu): 2.package.json配置: 3.多種打包情況(未使用CommonsChunkPlugi...
    若邪Y閱讀 5,176評(píng)論 6 7
  • 這個(gè)問(wèn)題其實(shí)是因?yàn)閣ebpack在每次執(zhí)行的過(guò)程中都會(huì)生成一段帶有模塊標(biāo)示的js真正被執(zhí)行的時(shí)候會(huì)用到的腳本 官方...
    Jalon閱讀 2,667評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,648評(píng)論 19 139
  • 今年以來(lái),我一直堅(jiān)持跑步,就算前些日子太陽(yáng)烤的大地都快冒煙了,我仍然堅(jiān)持著哼哧哼哧的跑完了我的里數(shù)和時(shí)間。每天...
    天天月月閱讀 423評(píng)論 0 0

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