【问题标题】:Configure output dir for Assetic in Symfony2在 Symfony2 中为 Assetic 配置输出目录
【发布时间】:2012-03-13 20:27:02
【问题描述】:

我想全局配置资产转储我的 JS 文件的输出目录。目前,他们总是去web/js/*。我想把它改成web/js/compiled/*

可以在每个文件级别指定:http://symfony.com/doc/2.0/cookbook/assetic/asset_management.html#dumping-asset-files

似乎找不到在我的 Symfony 应用程序中全局设置此设置的方法。我缺少任何配置参数吗?

更新

找到一个名为 write_to 的资产配置参数。在config.yml 中设置它会导致命令行assetic:dump 将文件转储到新目录,但在树枝文件中asset_url var 仍然指向原始路径。

【问题讨论】:

  • 您有没有想过解决方案?我会假设配置中的read_from 选项就是我们正在寻找的。但是,我无法选择做任何事情。无论我将 read_from 参数设置为什么,我的应用程序都使用默认路径。
  • @kmfk 还没有。现在,我们只是为每个 javascripts 块设置 output 参数,但这一点都不理想。
  • 是的,我将资产直接转储到我们的 S3 存储桶,我希望 prod 环境从那里读取文件 - 而开发环境转储到本地文件夹,同样,我的模板应该在我们的开发服务器上从该文件夹中读取。我最终检查了控制器中的环境并将一个 var 传递给模板,为 cdn 加上 asset_url 前缀。不理想,但它可以完成工作。
  • 那么为什么存在这个“write_to”参数,当变量 {{asset_url }} 不注意它时。这根本没有考虑过...... :(

标签: symfony assetic


【解决方案1】:

只是一个简短的说明。如果你使用assets_base_urls 来指定一个相对的基本 URL,这仅适用于 Symfony 2.7 之前的版本,因为该版本中引入了新的资产组件。有关如何更改此设置的更多信息,请访问 http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component,但总而言之:

framework:
    templating:
        assets_base_urls: 
            http: ['/some-relative-url']
            ssl: ['/some-relative-url']

变成:

framework:
    assets:
        base_path: /some-relative-url

【讨论】:

    【解决方案2】:

    This GitHub issue comment 帮助我解决了这个问题。 在开发中,您的资产仍将通过控制器,但在生产中,URL 将如您所愿。

    示例 config.yml:

    assetic:
        write-to:  %kernel.root_dir%/../web/assets
        ...
    framework:
        ...
        templating:
            engines: ['twig']
            packages:
                assetic:
                    base_urls: '/assets'
    

    模板中的示例:

    {% block javascripts %}
        {% javascripts '@jquery' '@bootstrap_js' '@backbone' '@handlebars' combine=true package='assetic' %}
        <script src="{{ asset_url }}"></script>
        {% endjavascripts %}
    {% endblock %}
    

    请注意,您必须在 java 脚本标签中添加 package='assetic' 属性。这是 IMO 的一个很好的折衷方案,因为它不会像 kmfk 的解决方案那样破坏其他捆绑包中的资产。

    【讨论】:

      【解决方案3】:

      您应该使用属性 write_to

      以我的配置为例,我使用

      # Assetic Configuration
      assetic:
          debug:          %kernel.debug%
          use_controller: %kernel.debug%
          read_from:      %kernel.root_dir%/Resources/views/
          write_to:       %kernel.root_dir%/../web/static/
      

      你的 输出 字符串从哪里开始 write_to

      例如

      {% javascripts filter="closure" output='js/main.js'
      

      ...

       {% stylesheets filter='compass,?cssrewrite' 
           'default/static/sass/screen.scss' 
           output='css/screen.css' 
       %} 
      

      两者都会分别放在/web/static/js/main.js/web/static/css/screen.css

      assets_base_urls 用于指定用于从 http 和 ssl (https) 页面引用的资产的基本 URL。

      !! {% images %} 也使用assets_base_urls 作为output 值之前的根,但{% images %} 在渲染html 时不考虑write_to(仅在转储时)所以最好不要使用write_to,而只依赖output 值。 更多信息请关注my other post on stackoverflowthis post on AsseticBundle's github

      【讨论】:

        【解决方案4】:

        试试这个命令$ app/console --env=prod assetic:dump web/ 你必须改变你想要的 url 而不是 'web/'

        【讨论】:

          【解决方案5】:

          您可以将 twig 的资产路径 (assets_base_urls) 设置为静态路径,而不是使用相对路径。在您的 config.yml 文件中,它看起来类似于:

          framework:
             templating:
                engines: ['twig']
                   assets_base_urls:
                      http: [http://path.to-cdn.com]
          

          这将从assetic 以及twig 的asset() 方法中影响asset_url。后者可能需要也可能不需要。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-02-20
            • 1970-01-01
            • 2011-10-26
            • 2014-08-06
            • 1970-01-01
            • 2014-07-27
            • 1970-01-01
            • 2016-04-15
            相关资源
            最近更新 更多