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

Github Actions中npm无法识别build_js脚本的问题求助

解决Lerna + npm Monorepo在Github Actions中找不到本地bin命令的问题

问题分析

本地构建正常但GHA中报错sh: 1: build_js: not found,核心原因是:npm workspaces默认不会将根node_modules/.bin中的可执行文件自动暴露给子包的脚本执行环境(本地可能因缓存或链接机制隐式生效,但GHA是全新环境),子包的build脚本直接调用build_js时,系统PATH中找不到该命令。

无需给子包添加依赖的解决方案

方案1:子包脚本改用npx调用

修改所有子包的package.json中的build脚本:

{
  "scripts": {
    "build": "npx build_js"
  }
}

npx会自动从项目根目录的node_modules/.bin中查找并执行build_js,无需子包单独声明依赖。

方案2:在GHA构建步骤中手动添加根bin路径到环境变量

修改GHA的构建步骤,将根node_modules/.bin加入系统PATH:

- name: Build project
  run: PATH="$PATH:./node_modules/.bin" npm run build-all

这样子包执行build_js时,系统会从根目录的bin目录中找到对应的可执行文件。

方案3:使用Lerna exec指定执行环境

修改根package.json的build-all脚本,通过lerna exec传递PATH:

{
  "scripts": {
    "build-all": "lerna exec --env PATH=\"$PATH:$(pwd)/node_modules/.bin\" -- npm run build"
  }
}

或者直接在GHA中用lerna exec执行构建:

- name: Build project
  run: lerna exec -- PATH="$PATH:$(pwd)/node_modules/.bin" npm run build

这种方式会给每个子包的执行环境注入根bin路径,确保build_js可被找到。

方案4:在根目录添加prepare脚本自动链接本地包

在根package.json中添加prepare脚本,安装依赖后自动链接build-scripts包:

{
  "scripts": {
    "prepare": "npm link ./packages/build-scripts"
  }
}

npm link会将本地的build-scripts包链接到全局node_modules,这样无论哪个子包执行build_js都能找到命令。GHA环境中无需额外权限,因为操作的是当前用户的全局目录。

验证建议

修改后可以在本地模拟GHA环境:删除node_modules和package-lock.json,重新执行npm install后运行npm run build-all,确认是否能复现并解决问题。

内容的提问来源于stack exchange,提问作者sydd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:17:44