我怎样才能使 heroku/nodejs buildpack 将 yarn 日志转储到控制台而不是 tmp 文件?

How can I make heroku/nodejs buildpack dump yarn logs into console instead of a tmp file?

一切都在问题中,但这里有一些细节。我有一个像这样的 monorepo 结构,建立在 yarn 工作区上:

my_app/
├─ node_modules/
├─ packages/
│  ├─ backend/
│  │  ├─ package.json/
│  │  ├─ Procfile/
│  ├─ frontend/
│  │  ├─ package.json/
│  │  ├─ Procfile/
│  ├─ common/
│  │  ├─ package.json/
├─ package.json/
├─ yarn.lock/

backendfrontend 各自依赖 common,但不相互依赖。

backendfrontend 需要部署到 Heroku。我使用 heroku/heroku-buildpack-multi-procfile buildpack 为每个应用程序设置一个 Procfile。所以后端的构建包是:

1. heroku/nodejs
2. heroku-community/multi-procfile

对于前端:

1. mars/create-react-app
2. heroku-community/multi-procfile

Note: mars/create-react-app uses heroku/nodejs for its build step, so it looks like the issue is with that one.

当我按下它们中的每一个时,它们会导致与 Yarn 的 link 步骤相同的错误:

remote:        ➤ YN0000: ┌ Link step
remote:        ➤ YN0062: │ fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=1cc4b2 The platform linux is incompatible with this module, link skipped.
remote:        ➤ YN0062: │ fsevents@patch:fsevents@npm%3A1.2.13#~builtin<compat/fsevents>::version=1.2.13&hash=1cc4b2 The platform linux is incompatible with this module, link skipped.
remote:        ➤ YN0008: │ my-app@workspace:. must be rebuilt because its dependency tree changed
remote:        ➤ YN0008: │ bcrypt@npm:5.0.1 must be rebuilt because its dependency tree changed
remote:        ➤ YN0008: │ @nestjs/core@npm:8.1.1 [496a1] must be rebuilt because its dependency tree changed
remote:        ➤ YN0009: │ my-app@workspace:. couldn't be built successfully (exit code 127, logs can be found here: /tmp/xfs-9791b677/build.log)
remote:        ➤ YN0000: └ Completed in 7s 955ms
remote:        ➤ YN0000: Failed with errors in 1m 11s

如您所见,它似乎试图构建根工作区(可能这就是构建 common 的方式?)但失败了。它将其日志转储到一个文件中,但据我所知,不可能看到在构建过程中生成的文件。

下面是我的问题:

  1. 有没有办法让它在控制台中显式转储日志?
  2. 如何在本地模拟相同的部署过程?我查看了 Heroku CLI 文档和 heroku/nodejs,但发现只有 运行 上的日志,没有部署。

感谢您一路来到这里!我必须提到我昨天开始使用 Heroku,所以我可能仍然遗漏了一些明显的东西 - 他们的日志很容易迷失。这不是我第一次使用托管软件,我了解他们的总体架构。

我终于明白了如何在本地模拟该过程:heroku/nodejs 实际上记录了它运行的每个步骤和每个命令。您可以找到它们,如果您在仪表板中转到您的应用程序 -> Activity -> 查看构建日志(在其中一个失败的日志上)。

在我的例子中 yarn workspaces focus --all --production 失败了,问题是我有一个 postinstall 脚本正在安装 husky,但 husky 本身是一个开发依赖项。我将安装后脚本更改为 prepare,这是仅在开发人员上运行的安装后脚本,它解决了问题。