Github Actions构建Nuxt3应用时出现npm ENOENT错误求助
ENOENT spawn sh错误 问题分析
你遇到的npm ERR! enoent spawn sh ENOENT错误,根源是依赖安装不完整或环境配置缺失,导致Nuxt构建脚本无法正常调用shell环境。结合你的配置来看,npm ci --ignore-scripts是关键问题——这个参数会跳过所有依赖包的install生命周期脚本,而Nuxt 3及部分依赖(比如原生模块、构建工具)需要通过这些脚本完成环境配置或二进制文件编译,跳过之后会直接导致构建流程缺少必要支持,触发找不到shell的错误。
修复方案
1. 移除--ignore-scripts参数
修改依赖安装步骤的命令,去掉跳过脚本的参数,让依赖包正常执行安装脚本:
- name: Install dependencies run: npm ci
npm ci本身会严格按照package-lock.json安装依赖,无需额外跳过脚本,恢复执行后能确保所有必要的环境配置和依赖编译完成。
2. 显式指定shell环境(可选)
如果上述方案无效,可以在构建步骤明确指定shell类型,避免环境识别问题:
- name: Build server run: npm run build shell: bash
3. 修正工作目录(针对路径嵌套问题)
错误信息里的路径/home/***/work/my-website-repo-name/my-website-repo-name显示存在目录嵌套,可能是actions/checkout的默认行为导致。可以在checkout步骤指定路径,避免嵌套:
- uses: actions/checkout@v3 with: path: my-website-repo-name
或者后续步骤切换到正确工作目录:
- name: Install dependencies run: npm ci working-directory: ./my-website-repo-name
验证方法
提交修改后的GitHub Actions配置,触发一次master分支的push,观察构建流程是否正常执行。如果仍有错误,查看npm日志文件(错误信息中的/home/***/.npm/_logs/2022-11-21T11_35_50_456Z-debug-0.log),排查是否还有其他依赖缺失或环境配置问题。
内容的提问来源于stack exchange,提问作者Enrico Bagattin

