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
.
Opzioni
Qualsiasi opzione per il comando run
dovrebbe essere elencata prima del nome dello script. Le opzioni elencate dopo il nome dello script vengono passate allo script eseguito.
Tutti questi eseguiranno pnpm CLI con l'opzione --silent
:
pnpm run --silent watch
pnpm --silent run watch
pnpm --silent watch
Tutti gli argomenti dopo il nome del comando vengono aggiunti allo script eseguito. Quindi se watch
esegue webpack --watch
, allora questo comando:
pnpm run watch --no-color
eseguirà:
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
.