资产:转储和资产之间的区别:安装
在Symfony2中, assetic:dump
和assets:install
什么区别assets:install
? 在什么情况下应该使用这些命令中的每一个,以什么顺序(如果顺序是相关的)?
我最近在一篇关于基于Symfony 2的OroCRM的文章中写到了这个 。如果你想了解一些不同命令的上下文/为什么,你可能会觉得很有趣。
在Symfony应用程序中包含前端文件(javascript,css,图像等)有两个不同的系统。 assets:install
命令第一。 这个命令将search应用程序中的所有Symfony Bundle
Resources/public
夹。 如果find了,那么assets:install
命令会将Resources/public
文件复制或符号链接到web/public/bundle/[bundle-name]
。 这是使用树枝assets
function创build的链接将查找这些文件。 这个
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
成为这个
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
这就是所有的assets
系统。 它可以让你存储你的前端文件的捆绑。
assetic
系统是不同的。 有了assetic
,你链接到这样的文件。
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %} <script type="text/javascript" src="{{ asset_url }}"></script> {% endjavascripts %}
样式表和图像也有类似的标签。 请注意, assetic
允许您链接到任何包中的文件。 ( @AcmeFooBundle
)。 Assetic也可以让你链接到通配符文件夹中的多个文件。
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %} <script type="text/javascript" src="{{ asset_url }}"></script> {% endjavascripts %}
与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>
也就是说,这些文件的请求将通过assetic
包中的特殊路由通过PHP前端控制器( app_dev.php
)运行。 这意味着,当您处于dev
模式时,您不需要转储资产。 它们被自动包含在内。 它还允许您将filter应用于文件。 例如,以下将cssrewrite
filter应用于拉入的文件。
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %} <link rel="stylesheet" href="{{ asset_url }}" /> {% endstylesheets %}
如果您想要以编程方式更改前端资产的输出,则可以使用assetic
编写自定义的树枝筛选器。
但是,这是性能密集型的。 在生产中,不是通过PHP前端控制器文件单独链接每个文件,而是生成的HTML将如下所示
<script type="text/javascript" src="/js/as5s31l.js"></script>
as5s31l.js
从哪里来? 这就是assetic:dump
命令的作用。 它结合了所有单独的javascript / css文件(在应用filter之后),并创build一个漂亮,静态,可caching的文件用于生产。
你需要做什么
除非项目明确告诉你,否则你应该总是运行assets:install
和assetic:dump
,因为你永远不会知道你的第三方bundle是否使用这些命令。 在部署或以prod
模式查看应用程序之前,只需运行assetic:dump
。 订单是无关紧要的。
至于你的软件包应该使用哪个系统 – 如果你已经阅读了上面的内容,而且你不确定什么assetic
可以为你做,那么使用assets
。 你会没事的。