Preventing Duplication by "Splitting" Shared Code into Separate Files

Suppose you have multiple entry files and each requires jquery. In this case, each output file will contain jQuery, making your files much larger than necessary. To solve this, you can ask webpack to analyze your files and split them into additional files, which will contain "shared" code.

複数のエントリ ファイルがあり、それぞれに jquery が必要だとします。この場合、各出力ファイルには jQuery が含まれるため、ファイルが必要以上に大きくなります。これを解決するには、webpack にファイルを分析して、「共有」コードを含む追加のファイルに分割するように依頼できます。

To enable this, call splitEntryChunks():

これを有効にするには、splitEntryChunks() を呼び出します。
1
2
3
4
5
6
7
8
9
10
11
// webpack.config.js
  Encore
      // ...

      // multiple entry files, which probably import the same code
      .addEntry('app', './assets/app.js')
      .addEntry('homepage', './assets/homepage.js')
      .addEntry('blog', './assets/blog.js')
      .addEntry('store', './assets/store.js')

+     .splitEntryChunks()

Now, each output file (e.g. homepage.js) may be split into multiple file (e.g. homepage.js & vendors-node_modules_jquery_dist_jquery_js.js - the filename of the second will be less obvious when you build for production). This means that you may need to include multiple script tags (or link tags for CSS) in your template. Encore creates an entrypoints.json file that lists exactly which CSS and JavaScript files are needed for each entry.

これで、各出力ファイル (例、homepage.js) は複数のファイルに分割される可能性があります (例、homepage.js と vendors-node_modules_jquery_dist_jquery_js.js - 2 番目のファイル名は、本番用にビルドする場合はあまり明確になりません)。これは、テンプレートに複数のスクリプト タグ (または CSS のリンク タグ) を含める必要がある場合があることを意味します。 Encore は、各エントリに必要な CSS および JavaScript ファイルを正確にリストした entrypoints.json ファイルを作成します。

If you're using the encore_entry_link_tags() and encore_entry_script_tags() Twig functions from WebpackEncoreBundle, you don't need to do anything else! These functions automatically read this file and render as many script or link tags as needed:

WebpackEncoreBundle の encore_entry_link_tags() および encore_entry_script_tags()Twig 関数を使用している場合は、他に何もする必要はありません!これらの関数は、このファイルを自動的に読み取り、必要な数のスクリプトまたはリンクタグをレンダリングします。
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') }}

Controlling how Assets are Split

The logic for when and how to split the files is controlled by the SplitChunksPlugin from Webpack. You can control the configuration passed to this plugin with the configureSplitChunks() function:

ファイルを分割するタイミングと方法のロジックは、Webpack の SplitChunksPlugin によって制御されます。 configureSplitChunks() 関数を使用して、このプラグインに渡される構成を制御できます。
1
2
3
4
5
6
7
8
9
// webpack.config.js
  Encore
      // ...

      .splitEntryChunks()
+     .configureSplitChunks(function(splitChunks) {
+         // change the configuration
+         splitChunks.minSize = 0;
+     })