You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku构建时无法识别package.json中@types类型依赖的问题求助

报错核心原因

  • Heroku默认在生产环境不会安装devDependencies下的依赖,你用到的@types/express、@types/node都放在开发依赖里,构建时TypeScript无法读取到对应的类型定义。
  • 你的Procfile存在语法错误,ts-node和文件路径之间缺少空格。
  • 生产环境直接使用ts-node运行代码效率较低,且额外需要生产环境安装TypeScript相关依赖,不是最优实践。
  • tsconfig.json存在配置错误,lib字段放在了compilerOptions外层不生效,也会导致内置类型识别异常。

推荐解决方案

  1. 调整package.json启动逻辑,生产环境运行编译后的JS产物
    修改scripts配置如下:
"scripts": {
  "start": "node build/server.js",
  "dev": "nodemon -x ts-node src/server.ts",
  "build": "tsc",
  "test": "jest --coverage"
}
  1. 修正Procfile内容,直接调用npm脚本即可:
web: npm start
  1. 修正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"]
}
  1. 配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:54:04