Webpack Symfony 4.4网页包Encore:tags赢得';不出现

Webpack Symfony 4.4网页包Encore:tags赢得';不出现,webpack,symfony4,Webpack,Symfony4,我正在将Symfony 3.x项目迁移到4.4。目前,我正在将细枝模板及其资产迁移到Flex(已经完成)和Webpack Encore(正在进行中) 如中所述,我将对assert()的所有调用替换为encore\u entry\u script\u tags()和encore\u entry\u link\u tags(),相应地,将入口点添加到webpack.config.js中,将网页包中的所有资产分组,就像之前在Twig文件中分组一样 我设法让登录页面工作。有两个入口点app和login,

我正在将Symfony 3.x项目迁移到4.4。目前,我正在将细枝模板及其资产迁移到Flex(已经完成)和Webpack Encore(正在进行中)

如中所述,我将对
assert()
的所有调用替换为
encore\u entry\u script\u tags()
encore\u entry\u link\u tags()
,相应地,将入口点添加到
webpack.config.js
中,将网页包中的所有资产分组,就像之前在Twig文件中分组一样

我设法让登录页面工作。有两个入口点
app
login
,每个入口点都有一个JavaScript文件,用于导入所有必需的SCS和JavaScripts文件
app
用于一般的
layout.html.twig
login
用于登录页面的特定
login.html.twig
login.html.twig
包含
layout.html.twig
,因此这两个资产都包含在html输出中

现在我想迁移由多个细枝模板组合在一起的第二个页面。与登录页面一样,我将其所有需求导入到新的JavaScript文件中,在
webpack.config.js
中为它们创建入口点,并将这些入口点应用到相应的细枝模板中。这也是可行的:在HTML数据中生成
脚本
样式
标记

奇怪的是,尽管第二个页面的Twig模板包括
layout.html.Twig
,就像登录页面一样,
app
入口点并没有出现在html输出中。我用html注释包围了
layout.html.twig
中的
encore\u entry\u*\ u标记
,以确保处理twig块。注释出现,但没有实际的
脚本
样式
标记。首先,我想我把它搞砸了,所以我登出去检查登录页面是否正常工作。确实如此,相应的标记会出现在HTML输出中

我还一次又一次地尝试重建资产(
Thread encore dev
;没有错误),但缺少的标记不会出现在第二页中

登录页面HTML源代码摘录:

<!-- banana: styles@app -->
<link rel="stylesheet" href="/build/vendors~app.css"><link rel="stylesheet" href="/build/app.css">
<!-- /banana: styles@app -->

[...]

<!-- banana: scripts@app -->
<script src="/build/runtime.js"></script>[... imported dependencies ...]<script src="/build/vendors~app.js"></script><script src="/build/app.js"></script>
<!-- /banana: scripts@app -->

<!-- banana: scripts@login -->
[... imported dependencies ...]<script src="/build/login.js"></script>
<!-- /banana: scripts@login -->
<!-- banana: styles@app -->

<!-- /banana: styles@app -->

<!-- banana: styles@leaflet -->
<link rel="stylesheet" href="/build/leaflet.css">
<!-- /banana: styles@leaflet -->

<!-- banana: styles@another.entrypoint -->
<link rel="stylesheet" href="another.entrypoint.css">
<!-- /banana: styles@another.entrypoint -->

[...]

<!-- banana: scripts@app -->

<!-- /banana: scripts@app -->

<!-- banana: scripts@leaflet -->
[... imported dependencies ...]<script src="/build/leaflet.js"></script>
<!-- /banana: scripts@leaflet -->

<!-- banana: scripts@another.entrypoint -->
<script src="/build/another.entrypoint.js"></script>
<!-- /banana: scripts@another.entrypoint -->

[...]
[…导入的依赖项…]
[…导入的依赖项…]
第二页HTML源代码摘录:

<!-- banana: styles@app -->
<link rel="stylesheet" href="/build/vendors~app.css"><link rel="stylesheet" href="/build/app.css">
<!-- /banana: styles@app -->

[...]

<!-- banana: scripts@app -->
<script src="/build/runtime.js"></script>[... imported dependencies ...]<script src="/build/vendors~app.js"></script><script src="/build/app.js"></script>
<!-- /banana: scripts@app -->

<!-- banana: scripts@login -->
[... imported dependencies ...]<script src="/build/login.js"></script>
<!-- /banana: scripts@login -->
<!-- banana: styles@app -->

<!-- /banana: styles@app -->

<!-- banana: styles@leaflet -->
<link rel="stylesheet" href="/build/leaflet.css">
<!-- /banana: styles@leaflet -->

<!-- banana: styles@another.entrypoint -->
<link rel="stylesheet" href="another.entrypoint.css">
<!-- /banana: styles@another.entrypoint -->

[...]

<!-- banana: scripts@app -->

<!-- /banana: scripts@app -->

<!-- banana: scripts@leaflet -->
[... imported dependencies ...]<script src="/build/leaflet.js"></script>
<!-- /banana: scripts@leaflet -->

<!-- banana: scripts@another.entrypoint -->
<script src="/build/another.entrypoint.js"></script>
<!-- /banana: scripts@another.entrypoint -->

[...]
[…导入的依赖项…]
我仔细检查了,因为一开始我认为
encore\u entry\u*\u标记
可能会相互覆盖,但是:

现在,签出页面将包含应用程序条目的所有JavaScript和CSS(因为它包含在base.html.twig中,并且有{{parent()}}调用)和签出条目

这正是在第二页的情况下不会发生的情况


有什么想法吗?

所以显然
assert()
encore\u entry\u*\u tags()
的行为是不同的。本例中的问题是由另一个模板引起的,该模板包括
layout.html.twig
。尽管有条件地使用了另一个模板(也就是说,在我的示例中没有使用它),但它恰好是先前呈现的

对一个类似问题的回答帮助我走上了正确的道路。似乎Webpack Encore不会两次输出
脚本
样式
标记(这在正常情况下是绝对合理的)。因此,我现在的任务是重写代码,以便只有在实际使用其他模板时才会呈现它们——在这种情况下,它们可以“窃取”标记