htmlWebPack 插件 publicPath 没有按预期工作

htmlWebPack plugin publicPath not working as expected

我的 webpack 输出:

output: {
    publicPath: path.join(basename, '/assets/'),
    path: `${__dirname}/built/core/assets/`,
    filename: '[name].[chunkhash].js',
},

index.html 模板:

<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
<script charset="utf-8" src="<%= htmlWebpackPlugin.files.chunks[chunk].entry %>"></script>
<% } %>

现在的问题是当 publicPath 设置为 path.join(basename, '/assets') 时,index.html 被解析为:

<script charset="utf-8" src="\assets/bundle.d121bf175aece5f14af6.js"></script>

没关系,但是因为我没有在 public 路径中添加尾部斜杠,在 bundle.[hash].js 文件中,chunks

script.src = __webpack_require__.p + "" + chunkId + "." + {"0":"24692a7f9ff51c72880c...
...
__webpack_require__.p = "\assets";

解析为 assets[id].[hash].js 没有斜杠,但找不到。但是,如果我将尾随逗号添加到 publicPath(path.join(basename, '/assets/')),则 index.html 将解析为

<script charset="utf-8" src="\assets\/bundle.d121bf175aece5f14af6.js"></script>

然后找不到 bundle.[hash].js 文件。

我在配置中缺少什么?

在 windows 环境中 path.join(basename, '/assets/') -> '\assets'

html-webpack-plugin 然后会检查当时是否有正斜杠 publicPath 的末尾,如果有 none 它会依次添加它 将解决捆绑路径 src="\assets\/bundle.[hash].js".master

该应用程序在测试/生产环境中运行,因为在 unix/macos 环境中,path.join(basename, '/assets/') -> '/assets/'

添加了对 webpack 配置的检查,从而修复了问题:

const environment = process.env.NODE_ENV || 'development';
const isDevelopment = environment === 'development';
...
output: {
    publicPath: isDevelopment ? '/assets/' : path.join(basename, '/assets/'),
}