有没有办法提示 webpack 根据需要生成相对于生成文件所在的文件的输出文件?假设我有以下配置:
let indexHTML = new HtmlWebpackPlugin({
template: "./src/pug/index.pug",
filename: 'index.html',
})
let iframeExample = new HtmlWebpackPlugin({
template: "./src/pug/iframe-example.pug",
filename: 'examples/index.html',
})
module.exports = merge(common, {
mode: "development",
output: {
filename: "[name].bundle.js",
path: path.join(__dirname, "/dist"),
},
entry: {
index: "./src/js/index.js",
},
plugins: [
new CleanWebpackPlugin(),
indexHTML,
iframeExample
],
module: {
rules: [
{
test: /\.css$/,
use: [
{
loader: 'file-loader',
options: {
name: "[name].[ext]",
outputPath: "css",
esModule: false,
}
}
]
},
{
test: /\.(svg|png|jpg|gif)$/,
use: {
loader: "file-loader",
options: {
name: "[name].[ext]",
outputPath: "imgs",
esModule: false,
}
}
},
{
test: /\.(aac|mp3)$/,
use: {
loader: "file-loader",
options: {
name: "[name].[ext]",
outputPath: "audio",
esModule: false
}
}
},
{
test: /\.(webm|mp4)$/,
use: {
loader: "file-loader",
options: {
name: "[name].[ext]",
outputPath: "video",
esModule: false
}
}
},
]
},
});
在此配置中,HtmlWebpackPlugin 生成了两个 html 页面:一个是“dist/index.html”(“dist/”是我的输出文件夹),另一个是“dist/examples/index.html”(即“index.html”)。 'examples/' 文件夹中的 html',HtmlWebpackPlugin 将为我创建)。
当文件加载器在我生成的 html 文件中遇到 require/import 语句时,它会尝试将其解析为 url 并将该文件从我的工作文件夹结构复制到输出文件夹中。在 file-loader 的 outputPath 中,我为输出内容(“imgs”、“video”等)指定了相对路径,这些路径将作为 file-loader 生成的每个 url 的前缀,从而在每个相应的 html 中生成相对 url .
问题是,文件夹本身将在输出文件夹(在我的情况下为“dist”)中生成,而不是在输出文件夹结构中出现相应 html 的位置。也就是说,在 'dist/examples/index.html' 中引用的所有 .css 文件都将放入 'dist/css/' 文件夹中,因此不会在 'dist/examples/index.html' 中看到,它只包含相对路径('css/')。
重申我的问题:如何使文件加载器生成相对于它们被引用位置的输出文件?也就是说,我希望文件加载器将“dist/examples/index.html”中引用的任何 .css 文件输出到“/dist/examples/css/”。