如何让Heroku/nodejs buildpack将Yarn日志输出到控制台而非临时文件
问题1:Yarn构建日志直接输出到控制台的方法
你当前用的是Yarn 2+(Berry版本),默认会把构建错误日志写入临时文件,可通过以下配置强制日志输出到控制台:
- 执行Yarn相关命令时添加
--inline-builds参数,该参数会把所有工作区的构建日志直接打印到标准输出,不会生成临时日志文件 - 可搭配
--verbose参数获取更完整的构建链路日志
如果是Heroku自动触发的构建流程,你可以在根目录package.json中重写install或heroku专属构建钩子脚本,示例配置如下:
{ "scripts": { "install": "yarn install --inline-builds --verbose", "heroku-postbuild": "yarn workspaces foreach --include common --include [当前部署的包名] run build" } }
另外你当前的127退出码大概率是根package.json缺少对应的build脚本导致Yarn找不到执行命令,可优先排查该配置。
问题2:本地模拟Heroku部署构建流程的方法
可通过Heroku官方工具实现完全对齐线上的本地构建:
- 先确保本地已安装Heroku CLI,再安装builds插件:
heroku plugins:install heroku-builds - 执行本地构建命令,替换为你的Heroku应用名:
heroku builds:create --app 你的应用名 --output-dir ./local-build-result
该命令会完全复用你在Heroku后台配置的buildpack顺序、环境变量,执行和线上部署完全一致的构建流程,所有日志会直接打印在本地控制台,构建产物会输出到指定的本地目录。
如果需要更底层的环境模拟,可直接拉取Heroku官方的heroku/nodejs基础镜像,把本地代码挂载到容器中执行构建命令,系统环境、依赖版本和线上完全一致。
额外排查建议
你用的mars/create-react-app和heroku/nodejs buildpack默认会在根目录执行构建,monorepo场景下需要给每个Heroku应用添加PROJECT_PATH环境变量,frontend应用设置值为packages/frontend,backend应用设置值为packages/backend,buildpack会自动进入对应工作区执行构建,避免误执行根目录脚本。
内容的提问来源于stack exchange,提问作者JaffParker
相关产品推荐
相关产品推荐

