Webpack Symfony 4.4网页包Encore:tags赢得';不出现
我正在将Symfony 3.x项目迁移到4.4。目前,我正在将细枝模板及其资产迁移到Flex(已经完成)和Webpack Encore(正在进行中) 如中所述,我将对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,
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不会两次输出脚本
和样式
标记(这在正常情况下是绝对合理的)。因此,我现在的任务是重写代码,以便只有在实际使用其他模板时才会呈现它们——在这种情况下,它们可以“窃取”标记