У меня похожая проблема, и я добился небольшого успеха при использовании конфигурации, которую я нашел здесь . Не уверен, будет ли это применимо к вашему конкретному случаю использования, но я подумал, что поделюсь.
Хеш оптимизации в конфигурации веб-пакета выглядит так:
optimization: {
splitChunks: {
cacheGroups: {
commons: {
name: "commons",
chunks: "initial",
minChunks: 2,
minSize: 0
}
}
},
occurrenceOrder: true
},
Итак, используя эти точки входа:
entry: {
app: './src/app.js',
home: './src/home.js',
product: './src/product.js'
}
И это как моя настройка HtmlWebpackPlugin:
// base template common to all pages
new HtmlWebpackPlugin({
hash: true,
inject: true,
template: './src/jinja-templates/base.html.j2',
filename: `${templates}/base.html.j2`,
chunks: ['commons', 'app']
}),
// JUST the homepage
new HtmlWebpackPlugin({
hash: true,
inject: true,
template: './src/jinja-templates/index.html.j2',
filename: `${templates}/index.html.j2`,
chunks: ['home']
}),
// JUST the product template
new HtmlWebpackPlugin({
hash: true,
inject: true,
template: './src/jinja-templates/product.html.j2',
filename: `${templates}/product.html.j2`,
chunks: ['product']
}),
Я успешно добавляю блоки "commons" и "app" на все страницы, а на главной странице добавляется "home" (только), а на странице продукта - "product" (только) добавлено. Вот пример источника «домашней» страницы:
<body>
...
<script type="text/javascript" src="/static/commons.7ca91fd78182a8eb23f6.js?7ca91fd78182a8eb23f6"></script>
<script type="text/javascript" src="/static/app.7ca91fd78182a8eb23f6.js?7ca91fd78182a8eb23f6"></script>
<script type="text/javascript" src="/static/home.7ca91fd78182a8eb23f6.js?7ca91fd78182a8eb23f6"></script>
</body>
Я не знаю, можно ли разделить модули продавца с помощью этой настройки. Я предполагаю, что это возможно, но если это так, секретная клика элиты вебпаков хранит эту информацию в надежном порядке: P
Но учитывая, что он уже разбивает код на несколько очень маленьких кусочков, я не уверен, что это необходимо (для меня, во всяком случае).