Heroku 不部署 TypeScript 应用程序

Heroku doesn't deploy TypeScript Application

问题

我制作了一个打字稿 discord 机器人并将其托管在 heroku 上。编译时出现以下错误,然后 运行 它。

Starting process with command `npm run dev`
State changed from starting to up
Process exited with status 127

> bot@1.0.0 dev
> run-s build start

sh: 1: run-s: not found
State changed from up to crashed
worker: npm run dev
// ...
"scripts": {
        "build": "tsc",
        "watch": "tsc -w",
        "start": "node dist/index.js",
        "dev": "run-s build start",
        "watch:start": "tsc-watch --onSuccess \"node ./dist/index.js\"",
        "format": "prettier --write \"src/**/*.ts\""
},
"engines": {
        "node": "17.8.0"
}
// ...

信息

我正在通过 Heroku CLI 进行部署

git push heroku main

开箱即用,在没有 Procfile 的情况下,Heroku 将在构建时(部署时)运行 您的 build 脚本和 start在 运行 时间(当你的测功机启动时)作为 web 测功机编写脚本。

你的 buildstart 脚本是有意义的,前者 运行ning tsc 将你的 TypeScript 编译为 JavaScript 后者 运行宁编译JavaScript。

因为你想要运行一个worker进程而不是一个web进程你需要一个Procfile,但是这个把工作交给了错误的脚本, 使用 dev 而不是 start:

worker: npm run dev

您的 dev 脚本试图在 运行 时构建您已经构建的应用程序,这是一个问题,原因如下:

  • 眼前的问题是 run-s 不可用,可能是 because it was declared as a dev dependency
  • 此处构建是多余的,因为您的应用程序已在部署期间编译,
  • 如果它能正常工作,每次你的 dyno 重新启动,你扩展你的应用程序等时,它都会显着延迟启动,
  • run-s 一样,tsc 可能在 运行 时不可用(而且不应该),因为它被声明为开发依赖项

使用您的 start 脚本而不是您的 dev 脚本:

worker: npm run start