安装任意NPM包均报spawn bash ENOENT错误,尝试常见修复方案无效
问题根因
报错spawn bash ENOENT是npm在安装带原生模块的包时(此处为better-sqlite3),需要调用bash执行编译脚本,但Windows系统环境中npm无法找到可执行的bash程序导致。
解决步骤
- 修正npm脚本执行器配置
先执行命令查看当前npm配置的脚本执行器:
如果返回结果为空或者不是合法的bash路径,执行以下命令配置为Git Bash的安装路径(替换为你本地实际的Git Bash路径,默认路径如下):npm config get script-shell
配置完成后重启终端重试安装即可。如果不想全局生效,可在命令后加npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"--location=project仅对当前项目生效。 - 确认Git Bash已加入系统PATH
打开CMD执行以下命令,验证Git Bash是否可以正常调用:
如果提示找不到命令,将Git安装目录下的bash --versionbin文件夹(默认为C:\Program Files\Git\bin)添加到系统环境变量PATH中,添加完成后重启终端甚至电脑重试。 - 改用CMD作为脚本执行器
如果不需要执行bash格式的构建脚本,可以将npm的脚本执行器改为系统自带的CMD:
配置后重试安装,若部分原生包构建失败可替换为yarn或pnpm作为包管理器重试,两者对Windows原生包编译的适配性更好。npm config set script-shell "C:\\Windows\\system32\\cmd.exe" - 安装Windows编译依赖
原生包编译需要对应的构建工具,可全局安装官方提供的编译依赖包:
安装完成后再重试npm安装操作。npm install --global --production windows-build-tools - 强制使用预编译二进制包
不需要本地编译的场景下,可以指定拉取预编译的better-sqlite3包,跳过编译步骤:npm install better-sqlite3 --build-from-source=false
内容的提问来源于stack exchange,提问作者Timtendo12
相关产品推荐
相关产品推荐

