Белый список кэша группы поставщиков - PullRequest
0 голосов
/ 01 октября 2018

Я работаю над большим унаследованным корпоративным приложением, на протяжении многих лет переводя его на 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 и не будут включены в записи, которые их используют.

Есть идеи?

...