当我使用 assetic 编译代码时,我的 js 文件被命名为 part_1.js、part_2.js。我在我的代码中的任何地方都看不到这个对 part_ 的引用。这是从哪里来的?
配置.yml
assetic:
assets:
our_custom_js:
inputs:
- '@MyBundle/Resources/public/js/base.js'
filters: []
output: 'custom.js'
fos_js_routes:
inputs:
- 'bundles/fosjsrouting/js/router.js'
output: 'fos_js_router.js'`
base.html.twig
{% javascripts combine=false output="sandbox.js"
'@our_custom_js'
'@fos_js_routes'
%}
<script src="{{ asset_url }}"></script>
<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>
{% endjavascripts %}
我的源最终看起来像这样
<script src="/sandbox_part_1.js"></script>
<script src="/js/routing?callback=fos.Router.setData"></script>
<script src="/sandbox_part_2.js"></script>
<script src="/js/routing?callback=fos.Router.setData"></script>
这里也有人问过这个问题How to make Symfony 2 asset compilation to product different filenames?
最佳答案
刚刚回答了同样的问题here .在开发环境中访问您的应用程序时添加“part_#”字符串 (app_dev.php
)。
默认情况下,{% javascripts %}
将使用 <script>
打印所有 Assets /脚本每个脚本的行。在生产环境中,它们是结合在一起的。
{% javascripts %}
功能就像一个foreach
在开发环境中循环,同时它将所有 Assets 合并到一个 <script>
中线在生产。如果您查看文档中的 PHP 脚本,您会发现它使用的是 foreach
。 :
<?php foreach ($view['assetic']->javascripts(
array(
'@AppBundle/Resources/public/js/*',
'@AcmeBarBundle/Resources/public/js/form.js',
'@AcmeBarBundle/Resources/public/js/calendar.js',
)
) as $url): ?>
<script src="<?php echo $view->escape($url) ?>"></script>
<?php endforeach ?>
你的 base.html.twig 应该是这样的:
{% javascripts combine=false output="sandbox.js"
'@our_custom_js'
'@fos_js_routes'
%}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>
当对方<script>
不在javascripts
里面部分,它不会在循环中,因此只会打印一次。
关于javascript - 为什么 part_1.js、part_2.js 出现在我的 assetic 编译代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22519271/