首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >assetic:dump和assets:install的区别

assetic:dump和assets:install的区别
EN

Stack Overflow用户
提问于 2014-04-05 05:16:41
回答 1查看 26.1K关注 0票数 81

在Symfony2中,assetic:dumpassets:install有什么不同?这些命令应该在什么情况下使用,以及按什么顺序使用(如果顺序相关)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-05 09:14:02

我实际上在wrote about this recently上写了一篇关于OroCRM的文章,它是基于Symfony 2的。如果你想了解一些不同命令的上下文/原因,你可能会发现它很有趣。

有两种不同的系统来包含前端文件(javascript、css、图像等)。在Symfony应用程序中。首先是assets:install命令。此命令将在应用程序中的所有Symfony包中搜索

代码语言:javascript
复制
Resources/public

文件夹。如果找到,assets:install命令会将文件从Resources/public拷贝或符号链接到web/public/bundle/[bundle-name]。这是使用twig assets函数创建的链接将查找这些文件的位置。这

代码语言:javascript
复制
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>

变成这样

代码语言:javascript
复制
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>

这就是assets系统所做的一切。它可以让你用捆绑包存储你的前端文件。

assetic系统则不同。使用assetic,您可以像这样链接到文件。

代码语言:javascript
复制
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

样式表和图像也有类似的标记。请注意,assetic允许您链接到包中的文件。(@AcmeFooBundle)。Assetic还允许您使用通配符链接到文件夹中的多个文件。

代码语言:javascript
复制
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

assetic的另一个不同之处在于生成的链接。在dev环境中,它们看起来像这样。

代码语言:javascript
复制
<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模式时,您永远不需要转储资产。它们会自动包含在内。它还允许您对文件应用筛选器。例如,以下代码将cssrewrite筛选器应用于拉入的文件。

代码语言:javascript
复制
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

如果您曾经想要以编程方式更改前端资源的输出,- assetic允许您通过编写自定义细枝过滤器来实现。

然而,这是性能密集型的。在生产环境中,生成的HTML将如下所示,而不是通过PHP前端控制器文件单独链接每个文件

代码语言:javascript
复制
<script type="text/javascript" src="/js/as5s31l.js"></script>

as5s31l.js是从哪里来的?这就是assetic:dump命令的作用。It 将所有单独的javascript/css文件(在应用过滤器之后)合并在一起,并为生产环境创建一个漂亮的、静态的、可缓存的文件。

你需要做的是

除非项目特别说明,否则您应该始终运行assets:installassetic:dump,因为您永远不知道您的第三方包中的哪个使用了这些命令。您只需在以prod模式部署或查看应用程序之前运行assetic:dump。顺序无关紧要。

至于你的捆绑包应该使用- if,你已经读过上面的内容,并且你不确定assetic能为你做什么,使用assets。你会好起来的。

票数 140
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22873164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档