node.js - NodeJS 子进程 EXEC 命令失败,NVM 权限被拒绝 OSX

标签 node.js child-process nvm

我正在尝试在 OSX 上的 Nodejs 子进程中启动 nvm 但是,这样做时,我收到以下错误: /bin/sh:/Users/miker/.nvm/nvm.sh:权限被拒绝。子进程以代码 126 退出(我将其称为 nvm 的显式路径,因为在没有它的情况下运行,子进程看不到可执行文件。)

这很明显是权限问题。但是,我不确定为什么,因为我可以毫无问题地自行启动命令。只有在子进程中启动时才会失败。也许,子进程在另一个配置文件的上下文中运行?如果是这样,有没有办法维持当前的配置文件或上下文?

这是一个示例代码

let exec = require('child_process').exec;

let child = exec('echo $NVM_DIR && $NVM_DIR/nvm.sh use && npm install', {
    cwd: './build/'
});

child.stdout.on('data',
    (data) => {
        console.log(data);
    });

child.stderr.on('data',
   (data) => {
        //throw errors
        console.log(data);
    });

child.on('close', (code) => {
    console.log('child process exited with code ' + code);
});

我正在使用 NodeJS 7.2.1 和 nvm 0.32.1 如果有人能解决这个问题,请告诉我。

最佳答案

~/.nvm/nvm.sh 不是可执行脚本,它意味着“有源”(不是在单独的 shell 中运行,而是在当前 shell 上下文中加载和执行)。

尝试像可执行文件一样运行它会导致权限错误,因为它没有可执行权限。

我不知道它是否会起作用,但试试这个:

echo $NVM_DIR && source $NVM_DIR/nvm.sh && nvm use VERSION && npm install

您可能必须显式设置 shell child_process.exec() 选项,以确保命令行在“完整”shell 中运行(例如 /bin/bash)。

关于node.js - NodeJS 子进程 EXEC 命令失败,NVM 权限被拒绝 OSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725871/

相关文章:

javascript - 我应该怎么做才能使用express-jwt访问我的静态资源?

javascript - TypeScript:库函数的返回类型未知时该怎么办

node.js - 如何重新启动 Node.js 应用程序并将新进程移交给控制台

node.js - 为什么 NodeJS execSync() 在执行自定义脚本时太慢

node.js - 使用 nvm Ansible 安装 Node

node.js - 如何从 socket.io-redis 发送私有(private)消息(发出)

javascript - 从 Node.js 向 MongoDB 集合插入不同类型的值

python - 我无法在全局范围内从 process.stdout.on 获取数据

node.js - 您将 $NVM_DIR 设置为 "/root/.nvm",但该目录不存在。检查您的配置文件和环境

node.js - ".nvm"不在路径中 - Apple M1 Macbook