更新(webpack-dev-server 4)
从最新版本开始。您必须用static.directory 和static.publicPath 替换contentBasePublicPath 和contentBase(参见下面的原始解决方案)。该功能仍然有效。
webpack.config.js
{
devServer: {
static: {
directory: path.resolve(__dirname, './assets'),
publicPath: '/assets'
}
}
}
使用webpack 5.58.2、webpack-cli 4.9.0、webpack-dev-server 4.3.1 测试。
继续阅读原始解决方案以获取更多信息。
原创(webpack-dev-server 3)
适合所有想要真正的静态文件而不复制它们并登陆这里的人。 Webpack 输出配置publicPath 不起作用。
您需要 DevServer 属性 contentBase 和可选的 contentBasePublicPath。
文档确实缺乏这些属性。所以让我解释一下:
用例:您想使用视频、声音和图像等静态文件而不复制它们。
在此示例中,在您的项目根目录中创建一个文件夹 assets。其余配置为默认配置(src、dist)。
webpack.config.js
{
devServer: {
contentBase: path.resolve(__dirname, './assets'),
contentBasePublicPath: '/assets'
}
}
如果没有contentBasePublicPath,资产可以通过根 URL 访问。由于contentBase 只定义了文件夹内容。
示例:
将图像文件“test.png”放入您的资产文件夹。
如果没有contentBasePublicPath,您可以使用例如访问它。 <img src="test.png">。使用contentBasePublicPath,您可以使用<img src="assets/test.png">。
your-project
|- assets
| |- test.png
|- dist (...)
|- src (...)
您可以使用任何您想要的路径。例如。将资产移动到您的 src 文件夹。只需将所有资产放在这里。它不会被构建处理/触及。并且该应用程序仍在从默认的根 (dist) 路径加载。这就是我们想要的。我认为最简单和最好的解决方案。
使用 TypeScript 项目和 Webpack 5(webpack-cli 4、webpack-dev-server 3)进行了测试。 ?