Давайте начнем с загрузки и выполнения полизаполнения как части каждой точки входа (как видно из документа babel-polyfill ), чтобы он выглядел следующим образом
app: ['babel-polyfill', './src/index.js'],
vendor: ['moment'],
Вот вывод после npm run start2
:
Asset Size Chunks Chunk Names
app.53452b510a24e3c11f03.js 419 KiB app [emitted] app
manifest.16093f9bf9de1cb39c92.js 5.31 KiB manifest [emitted] manifest
vendor.e3f405ffdcf40fa83b3a.js 558 KiB vendor [emitted] vendor
Что я понимаю, так это настройка babel-polyfill
в entry.app
, которая сообщает веб-пакету, что приложение требует полифилл. И пакет, определенный в vendor, сообщает плагину splitChunk, какие пакеты нужно объединить в группу кеша.
Учитывая моё понимание от split-chunks-plugin doc
Опция теста определяет, какие модули выбираются этой группой кеша. Отказ от этого выбирает все модули.
Таким образом, удаление опции test
из cacheGroup
приведет к тому, что весь код будет перемещен в комплект поставщика.
Зная, что у нас есть 2 решения.
1 / Использование обходного пути и дубликата загруженного скрипта
{
entry: {
app: [
'babel-polyfill',
'./src/index.js',
],
vendor: [
'babel-polyfill',
'moment',
],
},
optimization: {
splitChunks: {
cacheGroups: {
vendors: {
chunks: 'initial',
name: 'vendor',
test: 'vendor',
enforce: true,
},
},
},
runtimeChunk: {
name: 'manifest',
},
},
}
Поэтому мы сообщаем веб-пакету, что приложению требуется babel-polyfill
, и splitChunks
, что babel-polyfill
и moment
являются поставщиками для использования в группе кэша.
2 / Использовать импорт вместо загрузчика скриптов
В index.js
import 'babel-polyfill';
import moment from 'moment';
// ...
webpack.config.js
{
entry: {
app: [
'./src/index.js',
],
vendor: [
'babel-polyfill',
'moment',
],
},
// ...
Это гарантирует, что приложение заполняет polyfill.
Надеюсь, это поможет!