Symfony2/Assetic:在导入的 HTML 文件的资产路径中使用包注释

Symfony2/Assetic: Use bundle annotation in asset path for imported HTML files

我正在为我的单页 Web 应用程序使用 Symfony 2.8。我有一个文件 index.html.twig,它应该提供所有必需的资源。也许这很明显,但我希望每次在开发环境中都重新加载所有内容,而不是在生产环境中。所述所需资源是从位于 vendor 文件夹中的另一个包的 Resources 加载的。

因此,我在 config.yml 中配置了 Assetic,如下所述:

assetic:
    debug: "%kernel.debug%"
    use_controller:
        enabled: "%kernel.debug%"
    workers:
        cache_busting:
            enabled: "%kernel.debug%"

(我假设调试只在开发环境中启用)

我正在像这样加载所需的 CSS/JavaScript:

{% stylesheets
    '@StubbornShowaBundle/Resources/public/stubborn.css'
    '@StubbornShowaBundle/Resources/public/showa.css' %}
        <link type="text/css" href="{{ asset_url }}" rel="stylesheet" />
{% endstylesheets %}
{% javascripts
    '@StubbornShowaBundle/Resources/public/stubborn.js'
    '@StubbornShowaBundle/Resources/public/showa.js' %}
        <script src="{{ asset_url }}"></script>
{% endjavascripts %}

..这似乎按预期工作。但是,我还导入了 HTML 个文件。喜欢这个:

<link href="{{ asset('@StubbornShowaBundle/Resources/public/polymer/my-component.html') }}" rel="import"/>

但是,上面的代码不起作用。 @StubbornShowaBundle 注释似乎在 asset 命令中不可用。此外,HTML 导入似乎没有 "loop method"(或任何您想为 stylesheetsjavascriptsimages 调用的东西)。如果我直接 link 到有问题的文件,除了屈服于完全破坏与周围代码一致性的丑陋 hack 之外,我还破坏了整个 Symfony/Assetic 自动处理资源重新排序系统和调试变得一团糟。我如何以一种不会在每次调试时更改代码时都强制我重新转储资产的方式解决这个问题? (是否可以通过合理的方式解决?)

在 assets:install && assetic:dump 之后你可以 link 像这样:

href="/bundles/stubbornshowa/polymer/my-component.html"

看看

/web/bundles/

目录

如果您只是更新文件,您可以使用 assetic:dump --watch 或 assetic:watch

如果您将新文件放入资源中,则必须调用 assets:install

在 /web forlder 中,您也可以只创建一个名为 "uploads" 的文件夹 把你的东西放在那里,你可以 link 通过 href="/uploads/..." 那么你根本不需要任何资产

似乎无法像在 JavaScript、CSS 和图像中那样在 Assetic 中使用 HTML 导入。 To quote from the manual:

You can use Assetic to process CSS stylesheets, JavaScript files and images.


据我所知,应该做什么在很大程度上取决于情况(要求)。也许将所有内容都制作成模板也是一种可能,但在我的特殊情况下,我必须导入 Polymer 组件,因此将那些 HTML 文件制作成模板将是一场噩梦(因为语法冲突等等)。 所以我使用 url 获取了路径,并使用了 this answer.

中描述的方法