Предотвращение дублирования путем "разделения" общего кода в отдельные файлы
Дата обновления перевода 2024-07-25
Предотвращение дублирования путем "разделения" общего кода в отдельные файлы
Представьте, что у вас есть файлы с многочисленными точками входа, и каждый
требует jquery. В таком случае, каждый файл вывода будет содержать jQuery,
что сделает ваши файлы значительно больше, чем нужно. Чтобы решить это, вы можете
попросить webpack проанализировать ваши файлы и разделить их на дополнительные
файлы, содержащие "общий" код.
Чтобы включить это, вызовите splitEntryChunks():
1 2 3 4 5 6 7 8 9 10 11
// webpack.config.js
  Encore
      // ...
      // файлы с множественными точками входа, которые, скорее всего, импортируют один и тот же код
      .addEntry('app', './assets/app.js')
      .addEntry('homepage', './assets/homepage.js')
      .addEntry('blog', './assets/blog.js')
      .addEntry('store', './assets/store.js')
+     .splitEntryChunks()Теперь, каждый файл вывода (к примеру, homepage.js) может быть разделен на
несколько файлов (например, homepage.js и vendors-node_modules_jquery_dist_jquery_js.js
- имя второго файла будет менее очивидным при создании в производсте). Это означает,
что вам может понадобиться добавить несколько тегов script (или тегов link
для CSS) в ваш шаблон. Encore создает файл entrypoints.json ,
который перечисляет, какие точно файлы CSS и JavaScript нужны для каждой записи.
Если вы используете функции Twig encore_entry_link_tags() и encore_entry_script_tags()
из WebpackEncoreBundle, вам не нужно больше ничего делать! Эти функции автоматически
читают этот файл и отображают столько тегов script или link, сколько нужно:
1 2 3 4 5 6 7
{#
    May now render multiple script tags:
        <script src="/build/runtime.js" defer></script>
        <script src="/build/vendors-node_modules_jquery_dist_jquery_js.js" defer></script>
        <script src="/build/homepage.js" defer></script>
#}
{{ encore_entry_script_tags('homepage') }}Контроль разделения ресурсов
Логика того, когда и как разделять файлы, контролируется
SplitChunksPlugin из Webpack. Вы можете контролировать конфигурацию,
передаваемую этому плагину, с помощью функции configureSplitChunks():
1 2 3 4 5 6 7 8 9
// webpack.config.js
  Encore
      // ...
      .splitEntryChunks()
+     .configureSplitChunks(function(splitChunks) {
+         // измените конфигурацию
+         splitChunks.minSize = 0;
+     })