Typescript构建ExpressJS项目时丢失swagger.yaml与sequelize-cli文件夹
问题原因
TypeScript编译器tsc仅会编译.ts/.tsx类型的文件,对于swagger.yaml这类静态资源文件,以及sequelize-cli目录下的非TypeScript文件(比如迁移脚本、配置文件等),tsc不会自动将它们复制到dist目录中——这就是你构建后找不到这些内容的核心原因。
解决方案
方案1:使用copyfiles工具(推荐跨平台)
- 安装
copyfiles作为开发依赖:
npm install copyfiles --save-dev
- 修改
package.json中的build脚本,在tsc编译完成后添加复制命令:
"scripts": { "prod": "node dist/server.js", "dev": "npm run build && node dist/server.js", "build": "tsc && copyfiles -u 1 src/swagger.yaml src/sequelize-cli/**/* dist/" }
-u 1参数表示移除文件路径中的第一层(也就是src/),确保文件直接输出到dist对应位置,而不是dist/src/下。
方案2:手动添加复制命令(无额外依赖,适合单平台)
如果你不想安装额外工具,可以根据系统添加原生复制命令:
- Linux/macOS:
"build": "tsc && cp src/swagger.yaml dist/ && cp -r src/sequelize-cli dist/"
- Windows:
"build": "tsc && xcopy src\\swagger.yaml dist\\ /Y && xcopy src\\sequelize-cli dist\\sequelize-cli\\ /E /Y"
额外检查
确认你的tsconfig.json中include配置已经覆盖了src下所有文件(你当前的配置"include": [ "src/**/*" ]是正确的),但记住这仅让tsc识别这些文件,不会处理非TS类型资源。
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

