NodeJS Сбой команды EXEC дочернего процесса с NVM Отказано в доступе OSX

Я пытаюсь запустить nvm в дочернем процессе в Nodejs на OSX. Однако при этом я получаю следующую ошибку: /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 Если у кого-то есть решение этой проблемы, пожалуйста, дайте мне знать.

2 ответа

Решение

~/.nvm/nvm.sh не является исполняемым скриптом, он должен быть "источником" (не запускаться в отдельной оболочке, но загружаться и выполняться в текущем контексте оболочки).

Попытка запустить его так, как если бы он был исполняемым, привела бы к ошибке разрешения, поскольку у него нет разрешений на выполнение.

Я не знаю, сработает ли это, но попробуйте это:

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

Возможно, вам придется явно установить shell вариант для child_process.exec() чтобы убедиться, что командная строка запускается в "полной" оболочке (например, /bin/bash).

У меня была такая же проблема, но она была связана не с кодом, а с терминалом IDE, который я использовал.

Решением было сменить каталог в настройках IDE, при смене решилось.

В моем случае я использовал Jetbrains Phpstorm.

Другие вопросы по тегам