С недавнего времени многие команды 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}`);
}
});
, подробный стек содержит:
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)
Так что, скорее всего, child_process пытается вызвать / usr / bin / zsh. Но я понятия не имею, почему и как это исправить. Любые идеи?
Эта проблема, похоже, похожа на эту: Попытка запустить одновременно (npm ERR! Код ELIFECYCLE npm ERR!)
Complete переустановка узла, npm и nvm не помогли. Ошибка также возникает при использовании пряжи.
Другая проблема отладки:
Я не могу найти internal/child_process.js
или internal/process/next_tick.js
.
Редактировать: Я обнаружил, что эта ошибка возникает независимо от запускаемого сценария.
Если я запускаю сценарий npm run x
, определенный в пакете. json как "x"="npm run y"
. Это не удастся. Но если я запускаю npm run y
напрямую, он работает.