跳到内容

通过 Webpack Encore “拆分” 共享代码,防止重复

编辑此页

假设您有多个入口文件,并且每个文件都需要 jquery。在这种情况下,每个输出文件都将包含 jQuery,这会使您的文件比必要的更大。为了解决这个问题,您可以要求 webpack 分析您的文件并将其拆分为额外的文件,这些文件将包含“共享”代码。

要启用此功能,请调用 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()

现在,每个输出文件(例如 homepage.js可能会被拆分成多个文件(例如 homepage.jsvendors-node_modules_jquery_dist_jquery_js.js - 当您为生产环境构建时,第二个文件的文件名将不太明显)。这意味着您可能需要在模板中包含多个 script 标签(或 CSS 的 link 标签)。Encore 创建了一个 entrypoints.json 文件,其中列出了每个入口点所需的 CSS 和 JavaScript 文件。

如果您正在使用 WebpackEncoreBundle 中的 encore_entry_link_tags()encore_entry_script_tags() Twig 函数,则无需执行任何其他操作!这些函数会自动读取此文件并根据需要渲染尽可能多的 scriptlink 标签

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') }}

控制资产如何拆分

何时以及如何拆分文件的逻辑由 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;
+     })
本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本