【发布时间】:2015-09-09 21:36:01
【问题描述】:
在意识到无法在我们当前的产品服务器上安装 Bower 之前,我们已经开始使用 Bower(通过 SpBower)来管理我们的 js 和 css 库。
想法不是在prod服务器上生成文件,而是将prod文件转储到dev环境并上传这些转储文件。但是即使在 prod 模式下,Assetic 也在寻找源文件,并且 bower 会注册这些供应商文件,所以 Assetic 会抛出这个异常
(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 %}
有没有办法告诉资产忽略资产(jquery_js,jquery_ui_js...)只查看输出文件(vendor-1.js)?我在 Symfony2 食谱中找不到任何东西。
下面是 config.yml 中的 Assetic 和 Sp Bower 部分
assetic:
debug: "%kernel.debug%"
use_controller: false
bundles: [ ProjectBundle ]
filters:
cssrewrite: ~
sp_bower:
assetic:
nest_dependencies: false
bundles:
ProjectBundle:
asset_dir: ../../public/vendor
cache:
id: ~
directory: ../../public/vendor/cache
并且在 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",
...
}
}
【问题讨论】:
-
呃,如果你不想让 Assetic 从源文件中创建
output文件,你到底想让它做什么? -
假设我有 2 台服务器,1 台用于开发,1 台用于生产。我想要的是使用 Assetic 和 Bower 在开发服务器上生成输出文件,并仅在 prod 服务器上上传生成的输出文件(不是所有已在输出文件中聚合的源)。
-
好的,我明白了......我现在明白你的问题了。您能否发布一个使用 bower 过滤器的示例文件(例如生成
@jquery_js),以及来自您的config.yml的assetic部分? -
@Ixg 感谢您的帮助。我从
config.yml添加了相应的部分(我们使用的是SpBower)并添加了bower.json文件的内容。 -
您是否考虑过使用在 prod 模式下运行并生成所有资产的构建服务器,因此您只需复制它们? Assetic 在 dev 和 prod 模式下的工作方式不同,因此您需要使用“live”模式生成所有资产。但是生成后,你应该可以简单地复制它们并在实时服务器上使用它们。