Перейти к основному содержимому
Версия: Будущая

pnpm run

Алиасы: run-script

Запускает скрипт, определенный в файле манифеста пакета.

Примеры

Допустим, у вас есть сценарий watch, настроенный в файле package.json, например:

"scripts": {
"watch": "webpack --watch"
}

Теперь вы можете запустить этот сценарий с помощью pnpm run watch! Просто, правда? Для тех, кто любит сохранять нажатия клавиш и время, хорошая новость: все сценарии получают алиас в виде команд pnpm, поэтому, в конечном счете, pnpm watch - это всего лишь краткая запись для pnpm run watch (ТОЛЬКО для сценариев, которые не используют то же имя, что и уже существующие команды pnpm).

Выполнение нескольких сценариев

Вы можете запускать несколько сценариев одновременно, используя регулярное выражение, а не имя сценария.

pnpm run "/<regex>/"

Запустить все скрипты, названия которых начинаются с watch::

pnpm run "/^watch:.*/"

Подробности

В дополнение к уже существующим в окружении PATH, pnpm run содержит node_modules/.bin в PATH, предоставляемом сценариям. Это значит, до тех пор, пока у вас установлен пакет, вы можете использовать его в скрипте, как обычную команду. Например, если у вас установлен eslint, вы можете создать такой сценарий:

"lint": "eslint src --fix"

И, хотя в вашей оболочке не установлен eslint, он будет работать.

Для рабочих областей, <workspace root>/node_modules/.bin также добавляется в PATH, поэтому если инструмент установлен в корне рабочей области, он может называться в сценариях любого пакета.

Отличия от npm run

По умолчанию pnpm не запускает произвольные хуки pre и post для скриптов определенных пользователем (например, prestart). Это поведение, унаследованное от npm, привело к тому, что скрипты были неявными и запутывающими потоками исполнения, вместо того, чтобы вызываться явно. Это также приводило к неожиданному выполнению pnpm serve, также выполняющему pnpm preserve.

Если по каким-то причинам вам понадобится поведение pre/post scripts как в npm, используйте опцию enable-pre-post-scripts.

Окружение

Есть некоторые переменные окружения, которые pnpm автоматически создает для исполняемых сценариев. Эти переменные окружения могут использоваться для получения контекстной информации о запущенном процессе.

Это переменные окружения, созданные pnpm:

  • npm_command - содержит имя исполняемой команды. При исполнении команды pnpm run значение этой переменной будет "run-script".

Опции

Любые параметры команды run должны быть перечислены перед названием сценария. Опции, перечисленные после имени скрипта передаются исполняемому скрипту.

Все они будут запускать pnpm CLI с параметром --silent:

pnpm run --silent watch
pnpm --silent run watch
pnpm --silent watch

Все аргументы после имени команды добавляются в исполняемый сценарий. Так что, если watch запускает webpack --watch, то эта команда:

pnpm run watch --no-color

запустит:

webpack --watch --no-color

script-shell

  • По умолчанию: null
  • Тип: путь

Оболочка, используемая для сценариев, запускаемых с помощью команды pnpm run.

Например, для принудительного использования Git Bash в Windows:

pnpm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

shell-emulator

  • По умолчанию: false
  • Тип: Boolean

Когда true, pnpm будет использовать реализацию bash-like shell на языке JavaScript для выполнения сценариев.

Этот вариант упрощает кроссплатформенные сценарии. Например, по умолчанию, следующий сценарий не будет работать с системами, не совместимыми с POSIX:

"scripts": {
"test": "NODE_ENV=test node test.js"
}

Но если для параметра shell-emulator установлено значение true, сценарий будет работать на всех платформах.

--recursive, -r

Это запускает произвольную команду из объекта "scripts" каждого пакета. Если в пакете нет команды, она пропускается. Если ни один из пакетов не содержит команды, команда завершается ошибкой.

--if-present

Вы можете использовать флаг --if-present, чтобы избежать выхода с не-нулевым кодом когда сценарий не определен. Это позволяет запускать потенциально неопределённые сценарии без нарушения цепочки выполнения.

--parallel

Полностью игнорирует параллелизм и топологическую сортировку, запуская заданный скрипт немедленно во всех подходящих пакетах с префиксом потокового вывода. Это предпочтительный флаг для долго выполняющихся процессов над многими пакетами, например, для длительного процесса сборки.

--stream

Активирует незамедлительный вывод потока данных из дочерних процессов, добавляя префикс пакета-источника вывода. Это позволяет чередовать выходные данные из разных пакетов.

--aggregate-output

Агрегирует вывод дочерних процессов, которые выполняются параллельно, и выводит информацию только после завершения дочернего процесса. Это делает чтение больших лог-файлов после запуска pnpm -r <command> с --parallel или --workspace concurrency=<number> гораздо проще (особенно при использовании CI). Поддерживается только --reporter=append-only.

enable-pre-post-scripts

  • По умолчанию: false
  • Тип: Boolean

Если значение равно true, pnpm автоматически запустит сценарии pre/post. Так что запуск pnpm foo будет похож на запуск pnpm prefoo && pnpm foo && pnpm postfoo.

--resume-from <package_name>

Возобновляет выполнение из конкретного пакета. Это может быть полезно, если вы работаете с большим рабочим пространством и хотите перезапустить сборку в конкретном пакете, не проходя через все пакете, предшествующие этому в порядке сборки.

--report-summary

Запишет результат выполнения скриптов в файл pnpm-exec-summary.json.

Пример файла pnpm-exec-summary.json:

{
"executionStatus": {
"/Users/zoltan/src/pnpm/pnpm/cli/command": {
"status": "passed",
"duration": 1861.143042
},
"/Users/zoltan/src/pnpm/pnpm/cli/common-cli-options-help": {
"status": "passed",
"duration": 1865.914958
}
}

Possible values of status are: 'passed', 'queued', 'running'.

--filter <селектор пакета>

Подробнее о фильтрации.