Symfony 仅包含转储文件的资产资产
在意识到无法在当前prod服务器上安装Bower之前,我们已经开始使用Bower(通过SpBower)来管理js和css库 其思想不是在prod服务器上生成文件,而是在dev环境中转储prod文件并上载这些转储文件。但即使在prod模式下,Assetic也在寻找源文件,bower会注册这些供应商文件,因此Assetic会抛出此异常Symfony 仅包含转储文件的资产资产,symfony,bower,assetic,Symfony,Bower,Assetic,在意识到无法在当前prod服务器上安装Bower之前,我们已经开始使用Bower(通过SpBower)来管理js和css库 其思想不是在prod服务器上生成文件,而是在dev环境中转储prod文件并上载这些转储文件。但即使在prod模式下,Assetic也在寻找源文件,bower会注册这些供应商文件,因此Assetic会抛出此异常 (Twig_Error_Syntax(code: 0): An exception has been thrown during the compilation o
(Twig_Error_Syntax(code: 0): An exception has been thrown during the compilation
of a template (\"There is no \"jquery_js\" asset.\")
其中,在Bower注册之后以这种方式调用jquery_js
{% javascripts output='js/vendor-1.js'
'@jquery_js'
'@jquery_ui_js'
'@chartjs_js'
'@Chart_StackedBar_js_js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
在config_dev.yml中
assetic:
use_controller: false
以及bower.json文件的内容
{
"name": "ProjectBundle",
"dependencies": {
"jquery": "~2.0",
"jquery.countdown": "~2.0",
"jquery-ui": "~1.11",
"bootstrap": "~3.0",
...
}
}
我找到了一个工作,不是很好,但解决了我们的问题 其思想是仅在dev env上使用
sp_bower
,以便将其仅放在config_dev.yml
中,并在config_prod.yml
中手动指定prod env so上的命名资产
我们实际上不需要将正确的路径放入源文件,因为我们不会在prod上生成输出文件(但使用上载的文件),我们甚至可以使用一个假js文件(例如名为prodDumpAlert.js
)包含例如解释发生了什么的警报
因此,config_dev.yml
如下所示:
imports:
- { resource: config.yml }
assetic:
assets:
jquery_js:
inputs:
- '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
jquery_ui_js:
inputs:
- '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
chartjs_js:
inputs:
- '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
...
呃,如果您不希望Assetic从源文件创建
输出
文件,您希望它做什么?假设我有两台服务器,一台用于开发,一台用于产品。我希望使用Assetic和Bower在开发服务器上生成输出文件,并仅在产品服务器上上载生成的输出文件(并非所有的源都已聚合到输出文件中)。好的,我明白了…我现在理解了您的问题。您可以发布一个使用bower筛选器的示例文件(例如生成@jquery\u js
),以及您的config.yml
中的assetic
部分?@Ixg感谢您的帮助。我添加了config.yml
中的相应部分(我们正在使用SpBower)并添加了bower.json
文件的内容。您是否考虑过使用在prod模式下运行并生成所有资产的构建服务器,以便只需复制它们?Assetic在dev和prod模式下的工作方式不同,因此您需要使用“live”生成所有资产但是在生成之后,您应该能够简单地复制它们并在实时服务器上使用它们。
imports:
- { resource: config.yml }
assetic:
assets:
jquery_js:
inputs:
- '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
jquery_ui_js:
inputs:
- '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
chartjs_js:
inputs:
- '@ProjectBundle/Resources/public/utils/prodDumpAlert.js'
...