Symfony Encore 多资产清单

sva*_*tic 6 versioning manifest symfony webpack

我有一个关于 Symfony 3.4 中的 Encore 和资产版本控制的问题。

在我的webpack.config.js我有两种配置。第一个用于 JS 文件,另一个用于编译 .less。

每个配置都由 Encore.reset() 重置

输出束生成清单经由版本.enableVersioning,所以我有两个manifest.json

web/js/manifest.json
web/stylesheets/manifest.json
Run Code Online (Sandbox Code Playgroud)

根据文档,要通过清单加载我的资产,我需要在 config.yml

   assets:
        base_path: "%myapp.http.site_assets_suffix%" 
        stylesheets:
            json_manifest_path: "%kernel.project_dir%/web/assets/stylesheets/manifest.json"
Run Code Online (Sandbox Code Playgroud)

如果我想链接到style.css由 webpack 生成的,我使用

asset("stylesheets/style.css")
Run Code Online (Sandbox Code Playgroud)

但是在我的应用程序中,我有两个清单,我认为由于两个 Encore 配置,这无法更改。

我试过添加类似的东西

packages:
     stylesheets:
                json_manifest_path: "%kernel.project_dir%/web/assets/stylesheets/manifest.json"
     js:
                json_manifest_path: "%kernel.project_dir%/web/assets/js/manifest.json"
Run Code Online (Sandbox Code Playgroud)

因为我在某处看到过,但不幸的是这根本行不通。

我曾考虑在最后一个 webpack 入口点将两个清单合并为一个,但这可能很耗时。

除了将 manfiests 或将 js + less 编译组合成一项大型 Encore 任务之外,还有其他解决方案吗?

sva*_*tic 3

我找到了解决方案

assets:
    base_path: 'path%'
    packages:
        noversion:
            version: false
            version_format: "%%1$s"
            base_path: "path%"
        stylesheets:
            json_manifest_path: "%kernel.project_dir%/web/assets/stylesheets/manifest.json"
        js:
            json_manifest_path: "%kernel.project_dir%/web/assets/js/manifest.json"
        admin:
            json_manifest_path: "%kernel.project_dir%/web/assets/js/admin/manifest.json"
Run Code Online (Sandbox Code Playgroud)

然后在.twig文件中,您需要将其称为

    <script src="{{ asset('assets/DIRNAME/WEBPACK_ENTRY_NAME_HERE', ASSET_PACKAGE_NAME_HERE) }}"></script>
Run Code Online (Sandbox Code Playgroud)

就我而言

<script src="{{ asset('assets/js/backend.js', 'js') }}"></script>

Run Code Online (Sandbox Code Playgroud)

在我的例子中,WEBPACK_ENTRY_NAMEWebpack/Encore 包的名称在哪里webpack.config.js

.setOutputPath('./web/assets/js')
    .setPublicPath('/assets/js')
    .addEntry('backend',
Run Code Online (Sandbox Code Playgroud)

很抱歉迟到的答复,但我忘记了。