Pular para o conteúdo principal
Versão: 6.x

pnpm run

Aliases: run-script

Executa um script definido no arquivo de manifesto do pacote.

Exemplos

Digamos que você tenha um script watch configurado em seu package.json, da seguinte forma:

"scripts": {
"watch": "build-command --watch"
}

Agora você pode executar esse script usando pnpm run watch! Simples, certo? Outra coisa a notar para aqueles que gostam de economizar teclas e tempo é que todos os scripts possuem um alias de comando pnpm, por isso, no fim das contas, pnpm watch é apenas uma abreviação para pnpm run watch (SOMENTE para scripts que não compartilham o mesmo nome de comandos existentes do pnpm).

Detalhes

Além do PATHpré-existente do shell, pnpm run inclui node_modules/.bin no PATH fornecido para os scripts. Isso significa que, desde que você tenha um pacote instalado, você pode usá-lo em um script como um comando comum. Por exemplo, se você tem o eslint instalado, você pode escrever um script assim:

"lint": "eslint src --fix"

E mesmo que eslint não esteja instalado globalmente em seu shell, ele será executado.

For workspaces, as of v3.5, <workspace root>/node_modules/.bin is also added to the PATH, so if a tool is installed in the workspace root, it may be called in any workspace package's scripts.

Diferenças com npm run

Por padrão, o pnpm não executa hooks arbitrários pre e post para scripts definidos pelo usuário (como prestart). Esse comportamento, herdado do npm, fazia com que os scripts fossem implícitos em vez de explícitos, ofuscando o fluxo de execução. Também levou a execuções surpreendentes com pnpm serve também executando pnpm preserve.

Se por algum motivo você precisar do comportamento pré/pós scripts do npm, use a opção enable-pre-post-scripts.

Opções

script-shell

Added in: v5.10.0

  • Padrão: null
  • Tipo: caminho

The shell to use for scripts run with the pnpm run command.

For instance, to force usage of Git Bash on Windows:

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

shell-emulator

Added in: v5.8.0

  • Padrão: low
  • Tipo: Boolean

When true, pnpm will use a JavaScript implementation of a bash-like shell to execute scripts.

This option simplifies cross-platform scripting. For instance, by default, the next script will fail on non-POSIX-compliant systems:

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

But if the shell-emulator setting is set to true, it will work on all platforms.

--recursive, -r

This runs an arbitrary command from each package's "scripts" object. If a package doesn't have the command, it is skipped. If none of the packages have the command, the command fails.

--if-present

Added in: v4.5.0

You can use the --if-present flag to avoid exiting with a non-zero exit code when the script is undefined. This lets you run potentially undefined scripts without breaking the execution chain.

--parallel

Added in: v5.1.0

Completely disregard concurrency and topological sorting, running a given script immediately in all matching packages with prefixed streaming output. This is the preferred flag for long-running processes over many packages, for instance, a lengthy build process.

--stream

Added in: v5.1.0

Stream output from child processes immediately, prefixed with the originating package directory. This allows output from different packages to be interleaved.

--aggregate-output

Added in: v6.24.0

Aggregate output from child processes that are run in parallel, and only print output when the child process is finished. It makes reading large logs after running pnpm -r <command> with --parallel or with --workspace-concurrency=<number> much easier (especially on CI). Only --reporter=append-only is supported.

enable-pre-post-scripts

Added in: v6.1.0

  • Padrão: low
  • Tipo: Boolean

When true, pnpm will run any pre/post scripts automatically. So running pnpm foo will be like running pnpm prefoo && pnpm foo && pnpm postfoo.

--filter <package_selector>

Leia mais sobre filtragem.