HtmlWebpackPlugin - 在特定的地方注入js

问题描述 投票:0回答:2

我使用HtmlWebpackPlugin将javascript注入我的模板文件:

<html>
    ...
    <body>
        ...
        <?php echo $this->inlineScript(); ?>
        <script type="text/javascript" src="/dist/vendor.js?a4212b4b10c2d4d2d73e"></script>
    </body>
</html>

但是,我需要在PHP代码<?php echo $this->inlineScript(); ?>之前注入生成的bundle,以使内联脚本正常工作(它们需要JQuery,它将在vendor.js中加载)。

结果应该是:

<html>
    ...
    <body>
        ...
        <script type="text/javascript" src="/dist/vendor.js?a4212b4b10c2d4d2d73e"></script>
        <?php echo $this->inlineScript(); ?>
    </body>
</html>

有没有办法实现这个目标?也许有可能使用像<%= htmlWebpackPlugin.options.??? %>或类似的占位符?如果它不能与HtmlWebpackPlugin一起使用,我可以使用另一个webpack插件吗?

javascript webpack webpack-4 html-webpack-plugin asset-management
2个回答
0
投票

好吧我明白了。将以下代码放在要包含js文件的位置:

<% for(var i=0; i < htmlWebpackPlugin.files.js.length; i++) {%>
    <script type="text/javascript" src="<%= htmlWebpackPlugin.files.js[i] %>"></script>
<% } %>

并将HtmlWebpackPlugin选项中的inject设置为false。

请记住,您也需要手动注入其他东西(css,meta标签等)。 F.E. CSS:

<% for(var i=0; i < htmlWebpackPlugin.files.css.length; i++) {%>
    <link type="text/css" rel="stylesheet" href="<%= htmlWebpackPlugin.files.css[i] %>">
<% } %>

0
投票

不确定我是否太晚了,但你可以使用script-ext-html-webpack-plugin。这可以将脚本设置为defer,它可以推迟执行直到解析DOM。另外,你可以在html的head中注入这个脚本,开始并行获取它,但最后执行:

plugins: [
  new HtmlWebpackPlugin({ template: 'template.ejs', inject: 'head'}),
  new ScriptExtHtmlWebpackPlugin({ defaultAttribute: 'defer' }),
]
© www.soinside.com 2019 - 2024. All rights reserved.