Passa al contenuto principale
Versione: 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": "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.

--filter <selettore_pacchetto>

Ulteriori informazioni sui filtri.