Passa al contenuto principale
Version: Prossimo

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": "build-command --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, a partire dalla v3.5, <workspace root>/node_modules/.bin viene aggiunto anche 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#

script-shell#

Aggiunto nella versione: v5.10.0

  • 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#

Aggiunto nella versione: v5.8.0

  • 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#

Aggiunto nella versione: v4.5.0

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#

Aggiunto nella versione: v5.1.0

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#

Aggiunto nella versione: v5.1.0

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.

enable-pre-post-scripts#

Aggiunto nella versione: v6.1.0

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

--filter <selettore_pacchetto>#

Ulteriori informazioni sui filtri.