knpuniversity/webpack-encore-bundle

此包已被弃用且不再维护。作者建议使用 symfony/webpack-encore-bundle 包。

与您的 Symfony 应用及 Webpack Encore 集成!

dev-master 2018-12-03 13:30 UTC

This package is not auto-updated.

Last update: 2022-02-01 13:14:05 UTC


README

警告 此包 不再维护,请使用 symfony/webpack-encore-bundle 替代!!!

此包允许您通过读取 entrypoins.json 文件并帮助您渲染所有需要的动态 scriptlink 标签,来使用 Webpack EncoresplitEntryChunks() 功能。

使用以下命令安装此包:

composer require knpuniversity/webpack-encore-bundle

配置

如果您使用 Symfony Flex,则已完成!配方会在 config/packages/webpack_encore.yaml 文件中预先配置您需要的所有内容。

# config/packages/webpack_encore.yaml
webpack_encore:
    # The path where Encore is building the assets - i.e. Encore.setOutputPath()
    output_path: '%kernel.public_dir%/build'

    # The public prefix to your assets that you normally use with the asset() function (e.g. build/) -
    # should match the "setManifestKeyPrefix()" value in webpack.config.js, if set.
    asset_path_prefix: 'build/'

用法

首先,在 Webpack Encore 中启用“分割块”功能。

// webpack.config.js
// ...
    .setOutputPath('public/build/')
    .setPublicPath('/build')
    .setManifestKeyPrefix('build/')

    .addEntry('entry1', './assets/some_file.js')

+   .splitEntryChunks()
// ...

当您启用 splitEntryChunks() 时,您可能现在需要多个脚本和链接标签,而不仅仅是 entry1.js 的一个脚本标签和 entry1.css 的一个链接标签。这是因为 Webpack “分割” 您的文件以进行更优化的目的。

为了帮助您,Encore 将编写一个包含每个“入口”所需的所有文件的 entrypoints.json 文件。

例如,为了渲染特定“入口”(例如 entry1)的所有 scriptlink 标签,您可以

{# any template or base layout where you need to include a JavaScript entry #}

{% block javascripts %}
    {{ parent() }}

    {{ encore_entry_script_tags('entry1') }}
{% endblock %}

{% block stylesheets %}
    {{ parent() }}

    {{ encore_entry_link_tags('entry1') }}
{% endblock %}

假设 entry1 需要两个文件来包含 - vendor~entry1~entry2.jsentry1.js,那么 encore_entry_script_tags() 等同于

<script src="{{ asset('build/vendor~entry1~entry2.js') }}"></script>
<script src="{{ asset('build/entry1.js') }}"></script>

您的资产在 build/ 公共前缀由配置文件设置。

如果您想要更多控制,可以使用 encore_entry_js_files()encore_entry_css_files() 方法获取所需文件的列表,然后手动循环创建 scriptlink 标签。