webpack file-loader 复制文件
webpack file-loader duplicates files
我正在使用 webpack,它 file-loader + html-loader 将文件发送到我的输出目录。它几乎按预期工作,因为它还复制了这些文件。
这是我的 webpack.config.js
文件的一部分:
module.exports = {
module: {
rules: [
{ test: /\.html$/, use: ["html-loader"] },
{
test: /\.(jpg|png)$/,
use: {
loader: "file-loader",
options: {
name: "[name].[ext]",
outputPath: "img",
},
},
},
],
},
};
我的输出目录的样子有一个小例子:
dist/
- img/
- img1.png
- img2.png
- ab0d12.png
- c3d612.png
- index.html
- bundle.js
具有散列名称的两张图片与 img/
目录中的图片重复。正如您在上面的示例中看到的,我什至没有设置要散列的名称,而且我也无法以任何方式打开重复文件。
我正在使用 HtmlWebpackPlugin
或 CleanWebpackPlugin
等插件,但我相信它们不会导致问题。
版本:
- webpack
5.28.0
- 文件加载器
6.2.0
- html-装载机
2.1.2
经过长时间的搜索,我遇到了 SO 问题,似乎与我的问题非常相似,但是文件重复的原因不同。
在版本 5 中,webpack 引入了 Asset Modules 作为 raw-loader
、url-loader
和 file-loader
的替代品,现在默认为 运行:
Asset Modules is a type of module that allows one to use asset files (fonts, icons, etc) without configuring additional loaders.
每次 webpack 开始打包我的项目时,asset/resource
和 file-loader
同时 运行 并导致重复。
最终,我所要做的就是从 webpack.config.js
文件中删除 file-loader
并将 output.assetModuleFilename
设置为我想要的输出目录。
webpack.prod.js(开发配置不需要压缩镜像)
...
const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin");
module.exports = {
mode: 'production',
entry: './src/index.js',
output: {
filename: 'assets/app.js',
path: path.resolve(__dirname, 'dist'),
clean: true,
assetModuleFilename: 'img/[name][ext][query]' // dont use [hash] in name
},
module: {
rules: [
{
test: /\.(jpe?g|png|gif|svg)$/i,
type: "asset/resource"
}
],
},
plugins: [
new ImageMinimizerPlugin({
minimizerOptions: {
plugins: [
["mozjpeg", { quality: 60 }],
["pngquant", { quality: [0.6, 0.8] }],
],
},
})
]
};
webpack5使用Asset Modules type replaces all of these loaders, and with image-minimizer-webpack-plugin压缩图片
我正在使用 webpack,它 file-loader + html-loader 将文件发送到我的输出目录。它几乎按预期工作,因为它还复制了这些文件。
这是我的 webpack.config.js
文件的一部分:
module.exports = {
module: {
rules: [
{ test: /\.html$/, use: ["html-loader"] },
{
test: /\.(jpg|png)$/,
use: {
loader: "file-loader",
options: {
name: "[name].[ext]",
outputPath: "img",
},
},
},
],
},
};
我的输出目录的样子有一个小例子:
dist/
- img/
- img1.png
- img2.png
- ab0d12.png
- c3d612.png
- index.html
- bundle.js
具有散列名称的两张图片与 img/
目录中的图片重复。正如您在上面的示例中看到的,我什至没有设置要散列的名称,而且我也无法以任何方式打开重复文件。
我正在使用 HtmlWebpackPlugin
或 CleanWebpackPlugin
等插件,但我相信它们不会导致问题。
版本:
- webpack
5.28.0
- 文件加载器
6.2.0
- html-装载机
2.1.2
经过长时间的搜索,我遇到了
在版本 5 中,webpack 引入了 Asset Modules 作为 raw-loader
、url-loader
和 file-loader
的替代品,现在默认为 运行:
Asset Modules is a type of module that allows one to use asset files (fonts, icons, etc) without configuring additional loaders.
每次 webpack 开始打包我的项目时,asset/resource
和 file-loader
同时 运行 并导致重复。
最终,我所要做的就是从 webpack.config.js
文件中删除 file-loader
并将 output.assetModuleFilename
设置为我想要的输出目录。
webpack.prod.js(开发配置不需要压缩镜像)
...
const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin");
module.exports = {
mode: 'production',
entry: './src/index.js',
output: {
filename: 'assets/app.js',
path: path.resolve(__dirname, 'dist'),
clean: true,
assetModuleFilename: 'img/[name][ext][query]' // dont use [hash] in name
},
module: {
rules: [
{
test: /\.(jpe?g|png|gif|svg)$/i,
type: "asset/resource"
}
],
},
plugins: [
new ImageMinimizerPlugin({
minimizerOptions: {
plugins: [
["mozjpeg", { quality: 60 }],
["pngquant", { quality: [0.6, 0.8] }],
],
},
})
]
};
webpack5使用Asset Modules type replaces all of these loaders, and with image-minimizer-webpack-plugin压缩图片