为什么part_1.js, part_2.js显示在我的资产编译代码

Why is part_1.js, part_2.js showing up in my assetic compiled code

本文关键字:js part 代码 我的 编译 为什么 显示      更新时间:2023-09-26

当我使用asset编译我的代码时,我的js文件被命名为part_1.js, part_2.js。在我的代码中,我没有看到这个引用到part_。这是从哪来的?

config.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>

这个问题在这里也被问到如何使Symfony 2资产编译产生不同的文件名?

刚刚回答了同样的问题。在开发环境(app_dev.php)中访问您的应用程序时添加'part_#'字符串。

默认情况下,{% javascripts %}将打印所有资产/脚本,每个脚本使用<script>行。在生产环境中,它们是组合在一起的。

{% javascripts %}函数的作用就像开发环境中的foreach循环,而它将所有资产组合到生产中的单个<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部分内时,它将不在循环中,因此它将只打印一次。