如何在构建产物中包含资源文件夹,是否需要自定义webpack配置?
结论
是,你需要自定义webpack配置实现该需求。
webpack默认只会打包被import依赖引用的、符合配置后缀规则的文件,你的配置文件既没有被import引用,后缀也不在默认处理范围内,同时又不能放在public目录(public目录资源会被默认对外暴露可访问,不符合安全要求),因此必须通过自定义配置实现打包。
实现步骤
- 首先在src目录下创建对应私有配置存放目录,比如
src/main/resources,和Java的使用习惯对齐,所有需要纳入构建的私有配置都放入该目录。 - 安装
copy-webpack-plugin,这是webpack官方维护的资源拷贝插件,专门处理这类非依赖引用的文件打包需求:
npm install copy-webpack-plugin --save-dev
- 在webpack配置中添加插件配置,示例如下:
const CopyWebpackPlugin = require('copy-webpack-plugin'); const path = require('path'); module.exports = { // 保留你原有webpack配置的其余内容 plugins: [ new CopyWebpackPlugin({ patterns: [ { from: path.resolve(__dirname, 'src/main/resources'), to: path.resolve(__dirname, 'dist/resources'), noErrorOnMissing: true, // 目录为空时不触发构建报错 globOptions: { ignore: ['**/.*'] // 忽略目录下的隐藏文件 } } ] }) ] }
- 服务端读取配置时,路径匹配构建后的输出路径即可,例如读取resources下的
app-config.txt:
const fs = require('fs'); const path = require('path'); const configContent = fs.readFileSync(path.join(__dirname, './resources/app-config.txt'), 'utf-8');
注意事项
- 不要给构建后的
dist/resources目录配置静态资源公网访问路由,避免配置文件泄露 - 如果你使用的是封装过webpack的上层框架(如Vue CLI、Create React App、Next.js等),不需要直接修改webpack.config.js,在框架对应的自定义配置文件中添加该插件配置即可,配置逻辑完全一致
- 如果有多环境配置需求,可以在拷贝规则中通过环境变量过滤,仅拷贝对应环境的配置文件,减少冗余文件打包
内容的提问来源于stack exchange,提问作者Hans Poo
相关产品推荐
相关产品推荐

