Может кто-нибудь объяснить CommonsChunkPlugin Webpack

Я понимаю, что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 произойдет любое из следующего:

СЛУЧАЙ 1 : Если я пройду{ name : 'commons' } Я закончу со следующими файлами пакета:

entry1.bundle.js который содержит полный код изentry1.jsтребование дляjq,uery и не содержит времени выполненияentry2.bundle.js который содержит полный код изentry2.jsтребование дляjquery и не содержит времени выполненияvendors.bundle.js который содержит полный код изsome_jquery_pluginтребование дляjquery и не содержит времени выполненияcommons.bundle.js который содержит полный код изjquery и содержит время выполнения

Таким образом, в итоге мы получаем несколько небольших пакетов, а среда выполнения содержится вcommons расслоение. Довольно хорошо, но не идеально.

СЛУЧАЙ 2: Если я пройду{ name : 'vendors' } Я закончу со следующими файлами пакета:

entry1.bundle.js который содержит полный код изentry1.jsтребование дляjquery и не содержит времени выполненияentry2.bundle.js который содержит полный код изentry2.jsтребование дляjquery и не содержит времени выполненияvendors.bundle.js который содержит полный код изjquery а такжеsome_jquery_plugin и содержит время выполнения.

Таким образом, опять же, в итоге мы получаем несколько небольших пакетов, но среда выполнения теперь содержится вvendors расслоение. Это немного хуже, чем в предыдущем случае, так как время выполнения теперь вvendors расслоение.

ДЕЛО 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 расслоение. Это идеальный случай.

Что я не понимаю / я не уверен, что понимаю

ВДЕЛО 2 почему мы в конечном итоге сvendors комплект, содержащий как общий код (jquery) и все, что осталось отvendors запись (some_jquery_plugin)? Из моего понимания, чтоCommonsChunkPlugin неужели тут было то, что он собрал общий код (jquery), и так как мы заставили его вывести его наvendors как бы "слил" общий код вvendors расслоение (которое теперь содержит только код изsome_jquery_plugin).Пожалуйста, подтвердите или объясните.

ВДЕЛО 3 Я не понимаю, что случилось, когда мы прошли{ names : ['vendors', 'manifest'] } к плагину. Почему / какvendors пакет остался неповрежденным, содержащий обаjquery а такжеsome_jquery_plugin, когдаjquery явно общая зависимость, и почему был созданmanifest.bundle.js файл создан так, как он был создан (требующий все другие пакеты и содержащий среду выполнения)?

Ответы на вопрос(1)

Ваш ответ на вопрос