gpt4 book ai didi

symfony - assetic :dump and assets:install 之间的区别

转载 作者:行者123 更新时间:2023-12-03 05:12:26 25 4
gpt4 key购买 nike

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

最佳答案

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

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

Resources/public

文件夹。如果找到,assets:install 命令会将文件从 Resources/public 复制或符号链接(symbolic link)到 web/public/bundle/[bundle-name] 。这是使用 twig assets 函数创建的链接将查找这些文件的地方。这个

<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>

变成这样

<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>

这就是assets系统所做的全部事情。它允许您将前端文件与 bundle 一起存储。

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 前端 Controller (app_dev.php) 运行。这意味着,当您处于开发模式时,您永远不需要转储 Assets 。它们会自动包含在内。它还允许您对文件应用过滤器。例如,以下内容将 cssrewrite 过滤器应用于拉入的文件。

{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

如果您想以编程方式更改前端资源的输出 - assetic 可以让您通过编写自定义 twig 过滤器来实现这一点。

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

<script type="text/javascript" src="/js/as5s31l.js"></script>

as5s31l.js 来自哪里?这就是 assetic:dump 命令的作用。它组合所有单独的 javascript/css 文件(应用过滤器后)并创建一个漂亮的、静态的、可缓存的文件用于生产。

你需要做什么

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

至于您的 bundle 应使用哪个系统 - 如果您已阅读上述内容,但不确定 assetic 能为您做什么,请使用 assets。你会没事的。

关于symfony - assetic :dump and assets:install 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22873164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com