Есть ли способ получить имя сценария npm, переданное команде, указанной этим сценарием? - PullRequest
1 голос
/ 12 июля 2020

При использовании npm или пряжи, возможно ли, чтобы сценарий, указанный в сценарии npm, знал имя самого сценария npm? Например:

"scripts": {
  "foo": "echo Original command: $0",
  "bar": "echo Original command: $0"
}

Я бы хотел, чтобы результат этих двух скриптов был примерно таким:

Original command: yarn run foo
Original command: yarn run bar

Но на самом деле я получаю: Original command: /bin/sh.

И в случае, если это имеет значение, это просто имя скрипта, который мне нужен, а не часть yarn run, так что вывод типа Original command: foo подойдет.

1 Ответ

1 голос
/ 13 июля 2020

NPM добавляет переменную среды npm_lifecycle_event. Это похоже на пакет . json vars .

* Nix (Linux, macOS, ...)

On * nix платформы npm использует sh в качестве оболочки по умолчанию для запуска npm скриптов, поэтому ваши скрипты могут быть определены как:

"scripts": {
  "foo": "echo The script run was: $npm_lifecycle_event",
  "bar": "echo The script run was: $npm_lifecycle_event"
}

Примечание. Префикс доллара $ для ссылки на переменную.

Windows:

On Windows npm использует cmd.exe в качестве оболочки по умолчанию для запуска npm скриптов, поэтому ваши скрипты могут быть определены как:

"scripts": {
  "foo": "echo The script run was: %npm_lifecycle_event%",
  "bar": "echo The script run was: %npm_lifecycle_event%"
}

Примечание: Начальный и конечный знаки процента % используются для ссылки на переменную.

Кросс-платформенный (Linux, macOS, Windows, ...)

Для кроссплатформенности вы можете:

  1. Используйте cross-var , чтобы включить единый синтаксис, т.е. использовать префикс знака доллара $ в соответствии с синтаксисом * nix .

  2. Или используйте параметр командной строки node.js -p для оценки e и распечатайте результат следующего встроенного JavaScript:

    "scripts": {
      "foo": "node -e \"console.log('The script run was:', process.env.npm_lifecycle_event)\"",
      "bar": "node -e \"console.log('The script run was:', process.env.npm_lifecycle_event)\""
    }
    

    Примечание В этом примере мы:

    • Доступ к переменной среды npm_lifecycle_event с помощью свойства node.js process.env .
    • Используйте console.log (вместо echo), чтобы распечатать результат на stdout
...