Express项目生产构建未包含swagger.conf.json,如何将其纳入构建产物?
解决Express TS项目构建时swagger.conf.json未被纳入产物的方案
场景1:使用原生tsc完成编译
tsc默认只会处理.ts/.tsx后缀的代码文件,未被代码显式导入的json文件不会自动同步到构建输出目录,可选择以下任意一种方案解决:
- 方案1:修改构建脚本增加复制逻辑
- 安装跨平台文件复制工具:
npm install copyfiles --save-dev - 打开package.json修改build命令,在tsc编译完成后执行复制操作(以下示例默认构建输出目录为
dist,可自行替换为你的实际输出目录名):
"scripts": { "build": "tsc && copyfiles swagger.conf.json dist" } - 安装跨平台文件复制工具:
- 方案2:显式导入swagger配置文件
在你引用swagger配置的代码文件(通常是app.ts)中,将原本通过fs读取外部文件的逻辑改为直接导入:
同时打开tsconfig.json,确认开启以下配置:import swaggerConfig from './swagger.conf.json'
这种方式下tsc编译时会自动将对应的json文件输出到构建目录。{ "compilerOptions": { "resolveJsonModule": true, "esModuleInterop": true } }
场景2:使用第三方打包工具/上层框架构建
- 如果使用webpack:安装
copy-webpack-plugin插件,在webpack配置中添加规则,将根目录的swagger.conf.json复制到构建输出目录即可 - 如果使用NestJS框架:打开nest-cli.json,在
assets配置数组中添加"swagger.conf.json",框架构建时会自动同步该静态文件到输出目录 - 如果使用rollup/vite:可安装对应的静态资源复制插件,配置json文件复制规则即可
验证建议
修改配置后重新执行构建命令,确认构建输出目录下已生成swagger.conf.json,若你使用fs模块读取该配置,推荐用path.join(__dirname, 'swagger.conf.json')的方式写读取路径,避免相对路径寻址错误。
内容的提问来源于stack exchange,提问作者Pratheesh
相关产品推荐
相关产品推荐

