Я получаю общий смысл, что CommonsChunkPlugin
просматривает все точки входа, проверяет, есть ли между ними общие пакеты/зависимости и разделяет их на свой собственный пакет.
Итак, допустим, у меня есть следующая конфигурация:
...
enrty : {
entry1 : 'entry1.js', //which has 'jquery' as a dependency
entry2 : 'entry2.js', //which has 'jquery as a dependency
vendors : [
'jquery',
'some_jquery_plugin' //which has 'jquery' as a dependency
]
},
output: {
path: PATHS.build,
filename: '[name].bundle.js'
}
...
Если я свяжусь без использования CommonsChunkPlugin
В итоге у меня появятся 3 новых файла пакета:
-
entry1.bundle.js
, который содержит полный код изentry1.js
иjquery
и содержит собственную среду выполнения -
entry2.bundle.js
, который содержит полный код изentry2.js
иjquery
и содержит собственную среду выполнения -
vendors.bundle.js
, который содержит полный код изjquery
иsome_jquery_plugin
и содержит свое собственное время выполнения
Это, очевидно, плохо, потому что я потенциально буду загружать jquery
3 раза на страницу, поэтому мы этого не хотим.
Если я свяжусь с помощью CommonsChunkPlugin
В зависимости от того, какие аргументы передаются на CommonsChunkPlugin
, произойдет следующее:
-
CASE 1: Если я пройду
{ name : 'commons' }
, у меня появятся следующие файлы пакетов:-
entry1.bundle.js
, который содержит полный код изentry1.js
, требование дляjquery
и не содержит время выполнения -
entry2.bundle.js
, который содержит полный код изentry2.js
, требование дляjquery
и не содержит время выполнения -
vendors.bundle.js
, который содержит полный код изsome_jquery_plugin
, требование дляjquery
и не содержит время выполнения -
commons.bundle.js
, который содержит полный код изjquery
и содержит время выполнения
Таким образом, мы получим несколько небольших пакетов в целом, а время выполнения содержится в пакете
commons
. Довольно нормально, но не идеально. -
-
CASE 2: Если я пройду
{ name : 'vendors' }
, у меня появятся следующие файлы пакетов:-
entry1.bundle.js
, который содержит полный код изentry1.js
, требование дляjquery
и не содержит время выполнения -
entry2.bundle.js
, который содержит полный код изentry2.js
, требование дляjquery
и не содержит время выполнения -
vendors.bundle.js
, который содержит полный код изjquery
иsome_jquery_plugin
и содержит время выполнения.
Таким образом, мы снова получаем несколько небольших пакетов, но среда выполнения теперь содержится в пакете
vendors
. Это немного хуже, чем в предыдущем случае, поскольку среда выполнения теперь находится в пакетеvendors
. -
-
CASE 3: Если я пройду
{ names : ['vendors', 'manifest'] }
, у меня появятся следующие файлы пакетов:-
entry1.bundle.js
, который содержит полный код изentry1.js
, требование дляjquery
и не содержит время выполнения -
entry2.bundle.js
, который содержит полный код изentry2.js
, требование дляjquery
и не содержит время выполнения -
vendors.bundle.js
, который содержит полный код изjquery
иsome_jquery_plugin
и не содержит среды выполнения -
manifest.bundle.js
, который содержит требования для каждого другого пакета и содержит время выполнения
Таким образом, мы заканчиваем небольшими пакетами в целом, а время выполнения содержится в пакете
manifest
. Это идеальный случай. -
Что я не понимаю/Я не уверен, что понимаю
-
В CASE 2 почему мы закончили с пакетом
vendors
, содержащим как общий код (jquery
), так и все, что осталось от записиvendors
(some_jquery_plugin
)? По моему мнению, чтоCommonsChunkPlugin
здесь заключалось в том, что он собрал общий код (jquery
), и поскольку мы вынудили его вывести его в пакетvendors
, он вроде как "объединил" общий код вvendors
bundle (который теперь содержит только код изsome_jquery_plugin
). Пожалуйста, подтвердите или объясните. -
В CASE 3 Я не понимаю, что произошло, когда мы передали
{ names : ['vendors', 'manifest'] }
плагину. Почему/как пакетvendors
сохранялся неповрежденным, содержащим какjquery
, так иsome_jquery_plugin
, когдаjquery
явно является общей зависимостью, и почему был создан сгенерированный файлmanifest.bundle.js
так, как он был создан (требующий всех другие пакеты и содержащие время выполнения)?