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.