GitHub Actions CI运行时报错env-cmd: not found的问题求助
问题根因
你上传的工件仅包含build目录,而env-cmd这类npm依赖存储在node_modules目录下,并未被包含在上传的工件中。同时测试任务中你设置了install: false跳过了依赖安装流程,且你在start命令中临时安装的env-cmd为局部依赖,在start脚本的子shell执行上下文里无法识别到局部依赖的bin路径,最终抛出找不到命令的错误。
解决方案
你可以根据自身需求选择以下任意一种方案修复:
方案1:调整依赖安装逻辑(最稳妥)
- 移除测试任务中cypress action的
install: false配置,让action自动执行依赖安装,所有项目依赖包括env-cmd都会正常安装到当前任务的运行环境中 - 删除
start命令中临时添加的npm install env-cmd语句,避免重复安装浪费执行时间
修改后的cypress action配置参考:
- name: "UI Tests - Chrome" uses: cypress-io/github-action@v2 with: start: npm run start wait-on: "http://localhost:3000" wait-on-timeout: 120 browser: chrome record: false parallel: true group: "UI - Chrome" spec: cypress/tests/ui/* command: npm run e2e env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
方案2:同步node_modules目录减少重复安装耗时
如果你需要保留install: false来优化执行速度,可以将依赖目录也作为工件同步到测试任务:
- 修改install任务的上传工件配置,同时上传
node_modules目录:
- name: Save build and dependencies uses: actions/upload-artifact@v2 with: name: build-and-deps if-no-files-found: error path: | build node_modules
- 修改测试任务的下载工件配置,对应调整工件名称即可。
方案3:全局安装env-cmd临时修复
如果不想改动现有安装逻辑,可以把临时安装的env-cmd改为全局安装,修改start命令如下:
start: | npm install -g env-cmd npm run start
全局安装的依赖可在任意shell上下文被识别,直接解决命令找不到的问题。
另外你工作流配置中存在一个空的- name:步骤,建议直接删除避免不必要的警告。
内容的提问来源于stack exchange,提问作者theGermanJorge
相关产品推荐
相关产品推荐

