允许 bundle 扩展 Assetic 的资产配置

Posted

技术标签:

【中文标题】允许 bundle 扩展 Assetic 的资产配置【英文标题】:Allow bundle to extend asset configuration of Assetic 【发布时间】:2015-04-03 21:28:30 【问题描述】:

我目前正在努力满足这个要求:我们有一个模块化应用程序,客户可以在其中按需启用模块。每个模块都是一个包。现在我们有了某种仪表板,我想根据安装的模块/捆绑包注入资产(JS/CSS)。此外,我想将这些文件合并到一个“dashboard.js|css”文件中,这样我们每个捆绑的 js 和 css 文件就没有 1 个请求。

对于其他文件,我们使用了 Twig 的 Assetic 集成和命名资产的组合,但配置密钥 assetic.assets 似乎不能在包的扩展类中公开访问......这很遗憾' d 是我们方法的一种非常简单的方法。

我还研究了一个自定义配置/服务组合,以将资产加载器注入资产 AssetManager 服务...但这感觉完全是矫枉过正,我认为我只是错过了一些东西。

有什么想法吗?

更新 1

我的目标是以下配置:

assetic: # Assetic Configuration
    assets:
        dashboard_js: 
            inputs:
                - '@ModuleOneBundle/Resources/public/js/dashboard.js'
                - '@ModuleTwoBundle/Resources/public/js/dashboard_dep.js'
                - '@ModuleTwoBundle/Resources/public/js/dashboard.js'
                - '@ModuleThreeBundle/Resources/public/js/dashboard.js'

我们的客户可以决定他们使用哪些模块,因此我无法对它们进行硬编码。所以我试图使用Configuration 类,但他们无法访问我需要的东西。我想阻止运行自定义构建脚本来创建 config.yml 文件。

【问题讨论】:

嘿,我也对这个感兴趣。你找到解决办法了吗? 不,很遗憾没有。我仍在为此使用丑陋的解决方法。 :( 【参考方案1】:

您可以为此使用资产配置来编译一个文件,其中包含每个捆绑包的所有需求。也许你可以在你的配置中有一堆这些条目,全部定制,然后只调用你需要的组合的一个文件。例如

assetic: # Assetic Configuration
    assets:
        js1combo: 
            inputs:
                - '@AppBundle/Resources/public/js/js1.js'
                - '@AppBundle/Resources/public/js/js2.js'
        js2combo: 
            inputs:
                - '@AppBundle/Resources/public/js/js2.js'
                - '@AppBundle/Resources/public/js/js3.js'
        js3combo: 
            inputs:
                - '@AppBundle/Resources/public/js/js1.js'
                - '@AppBundle/Resources/public/js/js2.js'

在您的文件中,只需要一个 js 文件

% javascripts
    'js/js2combo.js'
%
    <script src=" asset_url "></script>
% endjavascripts %

如果它有帮助,我有一个工具可以让你的编译任务变得更容易,你可以每天运行一次。如果有人可以提供帮助,我会努力解决这个问题。这使我的资产生活更轻松。 :-)

https://github.com/wolfdogg/symphAstman

我不完全理解您的第二个问题,但听起来您可能想要为此提供服务,如果它太涉及您必须这样做的方式。

【讨论】:

我的问题是我无法硬编码config.yml 中的输入文件。我将更新我的问题以显示我的目标配置。

以上是关于允许 bundle 扩展 Assetic 的资产配置的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 Assetic 致命错误:在资产转储中找不到类“Assetic\Util\PathUtils”

Symfony2 Assetic 从控制器内部获取资产 url,而不是模板

Symfony2 Assetic + Twig 模板 JavaScript 继承

有没有办法自动化从Assetic到gulp的迁移?

Symfony Assetic 没有链接自己的包

每次重新加载页面时,如何强制资产渲染资产?