单Heroku dyno运行多个package.json构建流程的最佳方案是什么?
方案1:使用可遍历的独立构建脚本(最推荐)
这是适配你后续新增30款游戏需求的最优解,不需要每次新增游戏就修改构建配置,核心逻辑是自动遍历games目录下的所有游戏项目执行构建:
- 项目根目录新建构建脚本
build-all.sh,内容如下:
#!/bin/bash set -e # 任意步骤执行失败立即终止构建,避免线上出现不一致的版本 # 构建主应用 echo "构建主应用中..." npm run production # 遍历games下所有子目录 for game in ./games/*/; do # 仅处理包含package.json的合法游戏目录 if [ -f "${game}package.json" ]; then game_name=$(basename "$game") echo "正在构建游戏:${game_name}" # 进入对应目录执行构建 cd "$game" # 可选:用npm ci替代npm install,严格按照package-lock.json安装依赖,构建稳定性更高 npm ci npm run production # 返回项目根目录 cd ../../ fi done echo "所有项目构建完成"
- 给脚本添加执行权限,本地执行以下命令:
chmod +x build-all.sh
- 修改
package.json中的heroku-postbuild配置:
"heroku-postbuild": "./build-all.sh"
后续新增游戏时,只需要将游戏项目放到games目录下即可,不需要修改任何构建配置。
方案2:优化构建缓存降低构建耗时
随着游戏数量增多,全量构建可能触发Heroku默认15分钟的构建超时,你可以通过配置缓存减少重复安装依赖的时间:
在根目录package.json中添加cacheDirectories字段,Heroku会自动缓存这些目录的内容,避免每次构建重新下载依赖:
"cacheDirectories": [ "node_modules", "games/checkers/node_modules", "games/chess/node_modules", "games/mahjongg/node_modules" ]
新增游戏时同步更新这个配置即可,如果希望进一步简化,也可以修改构建脚本自动生成该配置。
可选优化:增量构建
如果30款游戏全量构建耗时过长,可以在构建脚本中增加git变更校验逻辑,仅构建上次发布后代码有变更的游戏,能大幅降低构建耗时。
内容的提问来源于stack exchange,提问作者Derrick Miller
相关产品推荐
相关产品推荐

