Как упоминал Деннис, React.lazy - это один хороший способ. Но если вы хотите полностью контролировать модули, которые поступают из node_modules или из любого места в вашем проекте - взгляните на webpack splitchunks
Это даст вам возможность решить, какой модуль идет на какой кусок. Быстрый пример:
optimization: {
splitChunks: {
cacheGroups: {
monaco_editor: {
test: /monceo-editor[\\/]/,
name: 'monaco_editor',
maxSize: MaxChunkSize,
minSize: MinChunkSize
},
}
}
}
Например, здесь я говорю, что возьмите все модули (файлы) в директории monaco-editor и поместите их в одну корзину - эта группа будет позже разделена на несколько блоков, каждый с минимальный размер MinChunkSize и максимальный размер MaxChunkSize.
Блок поставщика - это автоматическая группа кэша c, добавляемая веб-пакетом. - Он извлекает все модули из узловых модулей, которые не загружаются динамически, и помещает их в один блок.
Вы можете отключить это поведение, установив:
cacheGroups: {
defaultVendors: null
}
Вы можете определить свой собственный Простое / сложное распределение node_modules. Вы можете определить определенные пакеты, чтобы всегда go для определенных кусков. Таким образом, кэш чанка не изменится, если вы не обновите одну из версий пакетов - это хорошая практика для повышения производительности, поскольку этот кеш, скорее всего, будет обслуживаться из кеша.
Вот более сложный пример, который хорош для производительности:
optimization: {
splitChunks: {
cacheGroups: {
myVendor: {
test: /node_modules[\\/]/,
name(module) {
const matched = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/);
const packageName = matched && matched.length > 2 ? matched[1] : undefined;
return packageName;
},
maxSize: MaxChunkSize,
minSize: MinChunkSize
},
}
}
}
В этом примере каждый пакет будет pu sh в свое собственное ведро. Теперь ведро будет сливаться или делиться на минимальный / максимальный размер.