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'.