资产:转储和资产之间的区别:安装

在Symfony2中, assetic:dumpassets: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] 。 这是使用树枝assetsfunction创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应用于文件。 例如,以下将cssrewritefilter应用于拉入的文件。

 {% 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:installassetic:dump ,因为你永远不会知道你的第三方bundle是否使用这些命令。 在部署或以prod模式查看应用程序之前,只需运行assetic:dump 。 订单是无关紧要的。

至于你的软件包应该使用哪个系统 – 如果你已经阅读了上面的内容,而且你不确定什么assetic可以为你做,那么使用assets 。 你会没事的。