Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点子进程试图使用/usr/bin/zsh,但失败,因为它不存在_Javascript_Node.js_Npm_Zsh - Fatal编程技术网

Javascript 节点子进程试图使用/usr/bin/zsh,但失败,因为它不存在

Javascript 节点子进程试图使用/usr/bin/zsh,但失败,因为它不存在,javascript,node.js,npm,zsh,Javascript,Node.js,Npm,Zsh,自最近以来,许多npm命令对我来说都失败了,错误消息与此类似: npm ERR! code ELIFECYCLE npm ERR! syscall spawn /usr/bin/zsh npm ERR! file /usr/bin/zsh npm ERR! path /usr/bin/zsh npm ERR! errno ENOENT npm ERR! myProj@0.1.0 preinstall: `npm run myCommand` npm ERR! spawn /usr/bin/zsh

自最近以来,许多npm命令对我来说都失败了,错误消息与此类似:

npm ERR! code ELIFECYCLE
npm ERR! syscall spawn /usr/bin/zsh
npm ERR! file /usr/bin/zsh
npm ERR! path /usr/bin/zsh
npm ERR! errno ENOENT
npm ERR! myProj@0.1.0 preinstall: `npm run myCommand`
npm ERR! spawn /usr/bin/zsh ENOENT
npm ERR!
npm ERR! Failed at the myProj@0.1.0 preinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
到目前为止,我发现这个错误可能是由
/usr/bin/zsh
不存在引起的。zsh位于我的系统上的
/bin/zsh

导致此错误的脚本内容是:

const { exec } = require('child_process');
exec('npm -v', (err, stdout) => {
  if (err) throw err;
  if (parseFloat(stdout) < 5) {
    // NOTE: This can happen if you have a dependency which lists an old version of npm in its own dependencies.
    throw new Error(`[ERROR] You need npm version @>=5 but you have ${stdout}`);
  }
});
所以最有可能的child_进程正在尝试调用/usr/bin/zsh。但我不知道为什么以及如何解决这个问题。有什么想法吗

这个问题似乎与此类似:

完全重新安装节点、npm和nvm没有帮助。使用纱线时也会发生错误

另一个调试问题:

我在任何地方都找不到
internal/child\u process.js
internal/process/next\u tick.js

编辑:我发现,无论运行的脚本如何,这个错误都会引起关注


如果我运行一个脚本
npm run x
,它在package.json中定义为
“x”=“npm run y”
。这将失败。但是如果我直接运行npm run y,它就会工作。

我现在已经覆盖了两个OSX安全措施来解决这个问题:

  • 通过重新启动进入恢复(按住CMD+R),打开实用程序->终端,并运行
    csrutil disable
  • 通过运行以下命令删除/usr/bin的写保护:

    水门山/ 基拉尔查找器

  • 创建符号链接
    ln-s/usr/bin/zsh/bin/zsh

  • 现在错误消失了。但其原因和正确的修复仍然未知

    不是正确的解决方案,但您可以尝试将zsh二进制文件符号链接到
    /usr/bin/zsh
    安装代码时是否存在
    /usr/bin/zsh
    ?安装程序可能已修改脚本以使用硬编码路径。代码应该依赖于路径查找,或者在已知位置安装自己的依赖项,尽管.afaik它从未存在过。而且,通过禁用某些osx安全措施,不仅可以在该位置进行符号链接。不幸的是,即使禁用osx安全功能,我仍然从节点文档中得到“ln:/usr/bin/zsh:Read-only file system:“生成一个shell,然后在该shell中执行命令,缓冲所有生成的输出。”关于shell选项:“默认:'/bin/sh'on Unix”。看看
    /bin/sh
    指向什么。
    17 verbose stack spawn /usr/bin/zsh ENOENT
    17 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
    17 verbose stack     at onErrorNT (internal/child_process.js:415:16)
    17 verbose stack     at process._tickCallback (internal/process/next_tick.js:63:19)