【问题标题】:Assetic assets with only dumped files只有转储文件的资产资产
【发布时间】:2015-09-09 21:36:01
【问题描述】:

在意识到无法在我们当前的产品服务器上安装 Bower 之前,我们已经开始使用 Bower(通过 SpBower)来管理我们的 js 和 css 库。

想法不是在prod服务器上生成文件,而是将prod文件转储到dev环境并上传这些转储文件。但是即使在 prod 模式下,Assetic 也在寻找源文件,并且 bower 会注册这些供应商文件,所以 Assetic 会抛出这个异常

(Twig_Error_Syntax(code: 0): An exception has been thrown during the compilation 
of a template (\"There is no \"jquery_js\" asset.\")

这样在Bower注册后调用jquery_js的地方

    {% javascripts output='js/vendor-1.js'
        '@jquery_js'
        '@jquery_ui_js'
        '@chartjs_js'
        '@Chart_StackedBar_js_js' %}
        <script type="text/javascript" src="{{ asset_url }}"></script>
    {% endjavascripts %}

有没有办法告诉资产忽略资产(jquery_js,jquery_ui_js...)只查看输出文件(vendor-1.js)?我在 Symfony2 食谱中找不到任何东西。


下面是 config.yml 中的 Assetic 和 Sp Bower 部分

assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    bundles:        [ ProjectBundle ]
    filters:
        cssrewrite: ~

sp_bower:
    assetic:
        nest_dependencies: false
    bundles:
        ProjectBundle:
            asset_dir: ../../public/vendor
            cache:
                id: ~
                directory: ../../public/vendor/cache

并且在 config_dev.yml

assetic:
    use_controller: false

以及 bower.json 文件的内容

{
    "name": "ProjectBundle",
    "dependencies": {
        "jquery": "~2.0",
        "jquery.countdown": "~2.0", 
        "jquery-ui": "~1.11",
        "bootstrap": "~3.0",
        ...
    }
}

【问题讨论】:

  • 呃,如果你不想让 Assetic 从源文件中创建output 文件,你到底想让它做什么?
  • 假设我有 2 台服务器,1 台用于开发,1 台用于生产。我想要的是使用 Assetic 和 Bower 在开发服务器上生成输出文件,并仅在 prod 服务器上上传生成的输出文件(不是所有已在输出文件中聚合的源)。
  • 好的,我明白了......我现在明白你的问题了。您能否发布一个使用 bower 过滤器的示例文件(例如生成 @jquery_js),以及来自您的 config.ymlassetic 部分?
  • @Ixg 感谢您的帮助。我从config.yml添加了相应的部分(我们使用的是SpBower)并添加了bower.json文件的内容。
  • 您是否考虑过使用在 prod 模式下运行并生成所有资产的构建服务器,因此您只需复制它们? Assetic 在 dev 和 prod 模式下的工作方式不同,因此您需要使用“live”模式生成所有资产。但是生成后,你应该可以简单地复制它们并在实时服务器上使用它们。

标签: symfony bower assetic


【解决方案1】:

我找到了一种解决方法,虽然不是很好,但可以解决我们的问题。

我们的想法是仅在开发环境中使用sp_bower,以便仅将其放在config_dev.yml 中并在产品环境中手动指定命名资产,以便在config_prod.yml 中。

我们不必实际放置源文件的正确路径,因为我们不会在 prod 上生成输出文件(但使用上传的文件),我们甚至可以使用假的 js 文件(例如名为prodDumpAlert.js) 包含例如解释正在发生的事情的警报。

所以config_dev.yml 看起来像这样:

imports:
    - { resource: config.yml }

assetic:
    assets:
        jquery_js:
            inputs:
                - '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
        jquery_ui_js:
            inputs:
                - '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
        chartjs_js:
            inputs:
                - '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多