Heroku构建时无法识别package.json中@types类型依赖的问题求助
报错核心原因
- Heroku默认在生产环境不会安装
devDependencies下的依赖,你用到的@types/express、@types/node都放在开发依赖里,构建时TypeScript无法读取到对应的类型定义。 - 你的Procfile存在语法错误,
ts-node和文件路径之间缺少空格。 - 生产环境直接使用
ts-node运行代码效率较低,且额外需要生产环境安装TypeScript相关依赖,不是最优实践。 - tsconfig.json存在配置错误,
lib字段放在了compilerOptions外层不生效,也会导致内置类型识别异常。
推荐解决方案
- 调整package.json启动逻辑,生产环境运行编译后的JS产物
修改scripts配置如下:
"scripts": { "start": "node build/server.js", "dev": "nodemon -x ts-node src/server.ts", "build": "tsc", "test": "jest --coverage" }
- 修正Procfile内容,直接调用npm脚本即可:
web: npm start
- 修正tsconfig.json的配置错误,将
lib字段移入compilerOptions内层:
{ "compilerOptions": { "target": "es2017", "module": "commonjs", "sourceMap": true, "outDir": "./build", "rootDir": "./src", "strict": true, "noImplicitAny": true, "moduleResolution": "node", "baseUrl": "./src", "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "lib": ["es2015"] }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "src/**/*.test.ts"] }
- 配置Heroku安装所有依赖(可选,如果你有其他开发依赖需要在构建阶段使用):
在Heroku后台的「设置」-「配置变量」中新增变量NPM_CONFIG_PRODUCTION,值设为false,即可让Heroku安装devDependencies下的所有依赖。
临时解决方案(仍用ts-node运行)
如果不想修改运行逻辑,可以直接将@types/express、@types/node两个依赖从devDependencies移动到dependencies中,同时修正Procfile为:
web: ts-node src/server.ts
修改完成后先在本地执行npm run build确认无编译错误,再推送到Heroku即可正常构建运行。
内容的提问来源于stack exchange,提问作者kevin
相关产品推荐
相关产品推荐

