pnpm run
Alias: run-script
Esegue uno script definito nel file manifesto del pacchetto.
Esempi
Supponiamo che tu abbia uno script watch
configurato nel tuo package.json
, in questo modo:
"scripts": {
"watch": "webpack --watch"
}
Ora puoi eseguire questo script usando pnpm run watch
! Semplice, vero? Un'altra cosa da notare per coloro a cui piace risparmiare sequenze di tasti e tempo è che tutti gli script vengono resi alias come comandi pnpm, quindi alla fine pnpm watch
è solo abbreviazione per pnpm run watch
(SOLO per gli script che non condividono lo stesso nome dei comandi pnpm già esistenti).
Dettagli
Oltre alla preesistente PATH
della shell, pnpm run
include node_modules/.bin
nel PATH
fornito a scripts
. Ciò significa che finché hai installato un pacchetto, puoi usarlo in uno script come un normale comando. Ad esempio, se hai installato eslint
, puoi scrivere uno script in questo modo:
"lint": "eslint src --fix"
E anche se eslint
non è installato globalmente nella tua shell, verrà eseguito.
Per gli spazi di lavoro, viene anche aggiunto <workspace root>/node_modules/.bin
al PATH
, quindi se uno strumento è installato nella radice dello spazio di lavoro, può essere chiamato negli script
di qualsiasi pacchetto di spazio di lavoro.
Differenze con npm run
Per impostazione predefinita, pnpm non esegue gli hook arbitrari pre
e post
per gli script definiti dall'utente (come ad esempio prestart
). Questo comportamento, ereditato da npm, ha fatto sì che gli script siano impliciti invece che espliciti, nascondendo il flusso di esecuzione. Ha anche portato a sorprendenti esecuzioni con pnpm serve
che eseguiva anche pnpm preserve
.
Se per qualche motivo necessiti del comportamento degli script pre/post di npm, usa l'opzione enable-pre-post-scripts
.
Environment
There are some environment variables that pnpm automatically creates for the executed scripts. These environment variables may be used to get contextual information about the running process.
These are the environment variables created by pnpm:
- npm_command - contains the name of the executed command. If the executed command is
pnpm run
, then the value of this variable will be "run-script".
Opzioni
Any options for the run
command should be listed before the script's name. Options listed after the script's name are passed to the executed script.
All these will run pnpm CLI with the --silent
option:
pnpm run --silent watch
pnpm --silent run watch
pnpm --silent watch
Any arguments after the command's name are added to the executed script. So if watch
runs webpack --watch
, then this command:
pnpm run watch --no-color
will run:
webpack --watch --no-color
script-shell
- Predefinito: null
- Tipo: percorso
La shell da usare per gli script eseguiti con il comando pnpm run
.
Ad esempio, per forzare l'utilizzo di Git Bash su Windows:
pnpm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
shell-emulator
- Predefinito: false
- Tipo: Booleano
Quando true
, pnpm utilizzerà un'implementazione JavaScript di shell simili a bash per eseguire gli script.
Questa opzione semplifica lo scripting multipiattaforma. Ad esempio, per impostazione predefinita, lo script successivo avrà esito negativo sui sistemi non conformi a POSIX:
"scripts": {
"test": "NODE_ENV=test node test.js"
}
Ma se l'opzione shell-emulator
è impostata a true
, funzionerà su tutte le piattaforme.
--recursive, -r
Questo esegue un comando arbitrario dall'oggetto "script" di ogni pacchetto. Se un pacchetto non ha il comando, viene saltato. Se nessuno dei pacchetti ha il comando, il comando fallisce.
--if-present
Puoi usare il flag --if-present
per evitare di uscire con un codice di uscita diverso da zero quando lo script non è definito. Questo consente di eseguire script potenzialmente indefiniti senza interrompere la catena di esecuzione.
--parallel
Ignora completamente la convaluta e l'ordinamento topologico, eseguendo un dato script immediatamente in tutti i pacchetti corrispondenti con output di streaming prefissato. Questo è il flag preferito per i processi a lungo termine su molti pacchetti, per esempio, un lungo processo di compilazione.
--stream
Trasmetti immediatamente l'output dai processi figlio, con il prefisso della cartella del pacchetto di origine. Questo permette di interporre l'output di pacchetti diversi.
--aggregate-output
Aggrega l'output dai processi figlio eseguiti in parallelo e stampa l'output solo quando il processo figlio è terminato. Rende molto più semplice la lettura di registri di grandi dimensioni dopo aver eseguito pnpm -r <command>
con --parallel
o con --workspace-concurrency=<number>
(specialmente su CI). Solo --reporter=append-only
è supportato.
enable-pre-post-scripts
- Predefinito: false
- Tipo: Booleano
Quando true
, pnpm eseguirà automaticamente tutti gli script pre/post. Quindi l'esecuzione di pnpm foo
sarà come eseguire pnpm prefoo && pnpm foo && pnpm postfoo
.
--resume-from <package_name>
Added in: v7.22.0
Resume execution from a particular project. This can be useful if you are working with a large workspace and you want to restart a build at a particular project without running through all of the projects that precede it in the build order.