Если в вашем package.json-файле есть пользовательские сценарии, такие как «npm my-script» или «yarn my-script», они будут работать только с определенным вами менеджером пакетов. Но NPM предлагает API для вызова текущего исполняемого файла каждый раз без его явного указания.
{
"scripts": {
"cleanup": "./clean-up.js",
"copy": "./copy.js",
"prepare": "npm run cleanup && npm run copy"
}
}
Использование $npm_execpath
Используя строку «$npm_execpath» вместо «npm» или «yarn» (или другого менеджера пакетов, такого как «pnpm»), этот скрипт будет работать с каждым менеджером пакетов, независимо от того, как текущий разработчик использовал исходный скрипт. .
{
"scripts": {
"cleanup": "./clean-up.js",
"copy": "./copy.js",
"prepare": "$npm_execpath run cleanup && $npm_execpath run copy"
}
}
Он совместим со всеми машинами?
К сожалению, использование «$npm_execpth» для работы скриптов с любым менеджером пакетов не работает надежно на машинах с установленной Windows.
Каков самый надежный способ вызова скриптов в package.json?
Таким образом, самый надежный способ вызова ваших пользовательских сценариев в файле package.json по-прежнему заключается в том, чтобы явно определить исполняемый файл диспетчера пакетов и убедиться, что ваша команда использует только его.
Это лучше на устройствах, которые не работают под управлением Windows, где вы можете использовать «$ npm_execpath» для надежного выполнения этих сценариев.