If you're on Windows, and your entryPoints contain Windows's path character \, which work for esbuild, they won't match up with esbuild's internal naming. So nothing gets injected to the output html.
A simple fix is:
htmlPlugin({
files: [
{
entryPoints: process.platform == 'win32' ? entryPoints.map(e => e.replaceAll('\\', '/')) : entryPoints,
// ...
},
],
}),