Heroku部署Node.js+TypeScript项目时找不到@types/jest类型定义
解决Heroku部署Node.js+TypeScript项目时找不到@types/jest的问题
核心原因
本地构建正常是因为你安装了devDependencies里的@types/jest,但Heroku默认在生产环境不会安装devDependencies。而你的主tsconfig.json中compilerOptions.types包含了jest,即使生产构建用的tsconfig.build.json排除了测试文件,它依然继承了主配置的types设置,导致编译时尝试寻找jest类型定义但找不到。
解决方案
1. 修改生产构建用的tsconfig.build.json
在tsconfig.build.json中覆盖types配置,只保留生产环境需要的类型(比如node),移除jest:
{ "extends": "./tsconfig.json", "exclude": ["**/*.test.ts", "**/__tests__/*"], "compilerOptions": { "types": ["node"] } }
这样生产构建时就不会再尝试加载jest的类型定义,从根源避免报错。
2. 修正Heroku postbuild的依赖安装命令(备选)
你当前的postbuild命令用了NPM_CONFIG_PRODUCTION=false,但这是npm的参数,对于yarn应该用--production=false来强制安装所有依赖(包括devDependencies):
"heroku-postbuild": "cd client && yarn install && yarn build && cd .. && cd backend && yarn install --production=false && yarn build"
不过这个方案不推荐,因为会把开发依赖也打包到生产环境,增加部署体积,优先选择第一种方案。
3. 额外检查:确认tsconfig.build的继承关系
确保tsconfig.build.json确实正确继承了主配置,并且exclude规则生效,不会包含测试文件,避免编译时引入需要jest类型的代码。
内容的提问来源于stack exchange,提问作者SmgTR
相关产品推荐
相关产品推荐

