Webpack配置asset module后生成冗余images文件夹如何解决
双重images目录的问题根因
你当前配置中的assetModuleFilename: '../images/[name][ext]'存在路径逻辑错位,是冗余目录生成的直接原因:
- Webpack规定,
output.assetModuleFilename的路径计算基准为output.path指定的构建输出根目录(也就是你配置的build文件夹),所有路径都会相对于这个根目录拼接生成 - 配置中的
../会让Webpack跳出build目录的边界,向上跳转一级到项目根目录创建images文件夹存放资源 - Webpack不会主动拦截这种越界的路径配置,最终就会出现build目录内生成了一份正确的images资源、项目根目录同步生成一份冗余images目录的异常结果。你目前在构建脚本中添加的
rm -fr images只是事后清理逻辑,没有从配置层面解决问题根源。
无冗余的正确配置方案
- 移除全局assetModuleFilename配置里越界的
../路径前缀 - 按照输出目录的相对层级,直接配置基于build根目录的资源路径,不做跨级跳转
- 可参考的完整配置片段:
const path = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'build'), // JS文件输出到build/javascript目录 filename: 'javascript/[name].js', // 静态资源输出到build/images目录,无跨级路径 assetModuleFilename: 'images/[name][ext]', // 开启自动清理上次构建的残留文件,避免旧文件混杂 clean: true }, module: { rules: [ { test: /\.(png|jpe?g|gif)$/i, type: 'asset/resource' }, { test: /\.scss$/i, use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'] } ] }, plugins: [ new MiniCssExtractPlugin({ // CSS文件输出到build/style目录 filename: 'style/style.css' }), new HtmlWebpackPlugin({ template: './src/index.html' }) } }
- 按照上述配置执行构建后,build目录结构将完全符合预期:根路径是生成的index.html,子目录分别为存放JS资源的
javascript、存放CSS的style、存放图片的images,不会在项目根目录生成冗余的images文件夹,也就不需要在构建脚本中配置临时删除冗余目录的逻辑。
内容的提问来源于stack exchange,提问作者Angel Astorga
相关产品推荐
相关产品推荐

