在Symfony2中,assetic:dump和之间有什么区别assets:install?在什么情况下应该使用这些命令中的每一个,以及以什么顺序(如果顺序相关)?
Ala*_*orm 135
我最近在一篇关于OroCRM的文章中写到了这一点,它基于Symfony 2.如果你想要一些上下文/为什么不同的命令,你可能会发现它很有趣.
在Symfony应用程序中有两种不同的系统用于包含前端文件(javascript,css,images等).该assets:install命令首先出现.此命令将搜索应用程序中的所有Symfony Bundles
Resources/public
Run Code Online (Sandbox Code Playgroud)
夹.如果找到了,assets:install命令将复制或符号链接文件Resources/public到web/public/bundle/[bundle-name].这是使用twig assets函数创建的链接将查找这些文件的位置.这个
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
变成了这个
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
这就是assets系统所做的一切.它允许您使用捆绑包存储前端文件.
该assetic系统是不同的.有了assetic,你链接到这样的文件.
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Run Code Online (Sandbox Code Playgroud)
样式表和图像有类似的标签.请注意,assetic允许您链接到任何包中的文件.(@AcmeFooBundle).Assetic还允许您使用通配符链接到文件夹中的多个文件.
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Run Code Online (Sandbox Code Playgroud)
另一个区别assetic在于生成的链接.在dev环境中他们会看起来像这样.
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
Run Code Online (Sandbox Code Playgroud)
也就是说,对这些文件的请求将通过捆绑app_dev.php中的特殊路由设置来运行PHP前端控制器()assetic.这意味着,当您处于dev模式时,您永远不需要转储资产.它们是自动包含的.它还允许您将过滤器应用于文件.例如,以下内容将cssrewrite过滤器应用于所引入的文件.
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)
如果您曾想以编程方式更改前端资产的输出 - assetic可以通过编写自定义树枝过滤器来实现.
但是,这是性能密集型的.在生产中,生成的HTML不是通过PHP前端控制器文件单独链接每个文件,而是如下所示
<script type="text/javascript" src="/js/as5s31l.js"></script>
Run Code Online (Sandbox Code Playgroud)
哪里as5s31l.js来的?这就是assetic:dump命令的作用.它结合了所有单独的javascript/css文件(在应用过滤器之后)并为生产创建了一个漂亮的,可静态的,可缓存的文件.
除非明确项目告诉你,否则你应该始终运行assets:install和assetic:dump,因为你永远不会知道,你的第三方捆绑使用这些命令.您只需assetic:dump在以prod模式部署或查看应用程序之前运行.订单无关紧要.
至于你的捆绑应该使用哪个系统 - 如果你已经阅读了上述内容并且你不确定assetic可以为你做什么,请使用assets.你会没事的.
| 归档时间: |
|
| 查看次数: |
23711 次 |
| 最近记录: |