Я работаю над большим унаследованным корпоративным приложением, на протяжении многих лет переводя его на Webpack 2, а затем на 3. В ходе реализации Webpack мы создали несколько десятков entries
вместе с блоком vendor
, который содержалбольшие библиотеки, такие как jQuery и различные полифилы.Используя тогдашний CommonsChunkPlugin, я смог указать список модулей (локальных и из реестра), которые я хотел бы иметь в vendor
.
. Это прекрасно работало (и даже работало в asnyc).!) так как мы знали, сколько% наших пользователей посетили каждую страницу и нужно ли модулю находиться в глобальном чанке vendor
или только в записи (поэтому большинство пользователей не загружают модули, используемые только в пареиз редко используемых страниц).
Это изменилось, когда мы перешли на Webpack 4 и его SplitChunksPlugin.Со времени этого обновления нам так и не удалось найти решение для использования определенных модулей из белого списка в блоке vendor
.Это наша текущая конфигурация:
optimization: {
splitChunks: {
chunks: 'all',
minChunks: 2,
name: 'dependencies'
}
}
Теперь все модули, которые используются в 2 или более записях, помещаются в наш блок vendor
(который мы называем «зависимостями»).Это, однако, не является оптимальным, поскольку некоторые более тяжелые модули, которые мы хотим включить только в свои блоки ввода вместо того, который должны загружать все пользователи.
Я экспериментировал с различными другими конфигурациями и также пытался использоватьsplitChunks.cacheGroups.test
, но я не смог заставить его работать - похоже, он перебирает только записи, а не их внутренние модули.Может быть, - это путь, и я просто упускаю что-то решающее, но я не видел ни одного примера, используемого для реализации белого списка.В документации также сказано «Когда совпадает имя чанка, выбираются все модули в чанке», что является своего рода противоположностью того, что мне нужно.
Так что мне бы хотелось (и то, что мы имели в Webpack 2& 3) должен иметь массив модулей из белого списка, который Webpack будет использовать при создании фрагмента vendor
:
const dependencies = [
'jquery',
'core-js/fn/array/includes',
'./ui/modals'
]
… или, что еще лучше, dependencies.js
файла, который я мог бы каким-либо образом обработать:
import 'jquery'
import 'core-js/fn/array/includes'
import './ui/modals'
… и только эти модули попадут в чанк vendor
и не будут включены в записи, которые их используют.
Есть идеи?