Ссылка на переменные среды:
На переменные среды ссылаются с использованием другого синтаксиса для каждой операционной системы:
Вкл. * nix операционные системы, такие как macOS и Linux, на них ссылаются с использованием префикса знака доллара.Например:
$npm_execpath
^
В Windows на них ссылаются, используя знак процента с обеих сторон.Например:
%npm_execpath%
^ ^
Проверьте, существует ли переменная среды
Во-первых, проверьте, существует ли переменная npm_execpath
, временно добавив новый сценарий вscripts
раздел вашего package.json .Давайте назовем сценарий test-var
и определим его следующим образом в зависимости от того, какую ОС вы используете:
Для Windows (cmd)
Если вы работаете в Windows, определите скрипт следующим образом:
"scripts": {
"test-var": "echo %npm_execpath%",
...
}
Для macOS / Linux (bash)
Если вы работаете в macOS/ Linux (то есть bash) затем определите сценарий следующим образом:
"scripts": {
"test-var": "echo $npm_execpath",
...
}
Затем вызовите сценарий, выполнив следующие команды: npm run test-var
и yarn test-var
.
Если переменная npm_execpath
существует, вы должны увидеть путь, напечатанный на вашей консоли.Например, в macOS под управлением npm run test-var
будет напечатано что-то вроде следующего:
/usr/local/lib/node_modules/npm/bin/npm-cli.js
В Windows будет напечатано что-то похожее на следующее:
C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js
Он также должен печатать путь при запуске yarn test-var
.Однако файл, на который указывает путь, будет ссылаться на yarn.js
.Например, в macOS он будет печатать что-то вроде этого:
/Users/someone/.yarn/bin/yarn.js
Примечание: Если путь не выводится на вашу консоль, когдазапустив команды, упомянутые выше, затем рассмотрите возможность переустановки пряжи и / или npm.
Решения:
Для macOS / Linux (bash)
Используйте переменную $npm_execpath
, как вы сейчас делаете.
Для Windows (cmd)
Заменить все экземпляры $npm_execpath
в все сценариев на:
node \"%npm_execpath%\"
Например, ваштекущий скрипт с именем typecheck:watch
будет переопределен как:
"scripts": {
"typecheck:watch": "node \"%npm_execpath%\" run typecheck -- --watch",
...
}
В приведенном выше примере мы явно используем nodejs для вызова переменной npm_execpath
.Мы также помещаем переменную npm_execpath
между знаками процента (т. Е. %...%
) и заключаем их в двойные кавычки JSON (т. Е. \"...\"
).
CrossПлатформа
Использование разных синтаксисов для разных ОС для сравнения переменных не является идеальным, особенно если вы хотите поддерживать как операционные системы Windows, так и * nix.
Для одного синтаксиса, которыйработает кроссплатформенно ( Windows , macOS , Linux ) Я предлагаю установить и использовать yarpm .В этом случае замените все экземпляры $npm_execpath
в все сценарии на yarpm
.
Например, ваш текущий сценарий с именем typecheck:watch
будет переопределенкак:
"scripts": {
"typecheck:watch": "yarpm run typecheck -- --watch",
...
}