微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在父和孙子树枝模板中使用 encore_entry_script_tags 记录到控制台 2 次

如何解决在父和孙子树枝模板中使用 encore_entry_script_tags 记录到控制台 2 次

我有父 main_layout.html.twig 并且里面有这样的东西:

{% block javascripts %}
    {{ encore_entry_script_tags('main_layout') }}
{% endblock %}
{% block content %}{% endblock %}

我们有子 user_profile_main_page.html.twig 并且在它里面是这样的:

{% extends "main_layout.html.twig" %}
{% block javascripts %}
    {{ parent() }}
    {{ encore_entry_script_tags('user_profile_main_page') }}
{% endblock %}
{% block content %}
    {{ render_esi(controller('SiteBundle:User/Profile:activeAds')) }}
{% endblock %}

User/Profile:activeAds 正在呈现 user_profile_active_ads.html.twig,其中包含:

{{ encore_entry_script_tags('user_profile_active_ads') }}

Encore 设置为:

Encore
    .setoutputPath('web/build/')
    .setPublicPath('/build')
    .enableSourceMaps(!Encore.isProduction())
    .enabLeversioning()
    .addEntry('main_layout','./src/SiteBundle/js/MainLayout.js')
    .addEntry('user_profile_main_page','./src/SiteBundle/js/UserProfileMainPage.js')
    .addEntry('user_profile_active_ads','./src/SiteBundle/js/UserProfileActiveAds.js')
    .splitEntryChunks()
    .enableSingleRuntimeChunk()
    .autoprovidejQuery();

config.yml 包含:

framework:
    esi:             { enabled: true }
    fragments:       ~

UserProfileActiveAds.js 包含:

$(function () {
    console.log('aaa');
});

当这个页面启动时,'aaa' 被写入两次到控制台。

创建的 Html 如下所示:

<script src="/build/runtime.672c0058.js?r12513"></script>
<script src="/build/0.cf60d32b.js?r12513"></script>
<script src="/build/1.a39e4c28.js?r12513"></script>
<script src="/build/main_layout.e553e805.js?r12513"></script>

<script src="/build/5.d1d1404c.js?r12513"></script>
<script src="/build/user_profile_main_page.e7b326a8.js?r12513"></script>

<script src="/build/runtime.672c0058.js?r12513"></script>
<script src="/build/0.cf60d32b.js?r12513"></script>
<script src="/build/1.a39e4c28.js?r12513"></script>
<script src="/build/user_profile_active_ads.71f49a75.js?r12513"></script>

那是runtime.672c0058.js?r12513在html中包含了两次!我认为这就是将字符串写入 2 次以记录日志的原因。 console.log('aaa') 只能找到一次是 js 文件(在 /build/user_profile_active_ads.9b477d8d.js?r12513 中)。

当我不写 render_esi 时,我只写渲染:一切都按预期工作 - 字符串一次被记录到输出(并且运行时只包含一次)。但我想使用render_esi,因为user_profile_active_ads.html.twig 不应该被缓存,而它的父被缓存。

如何通过双重初始化解决这个问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。