Script indipendenti dal pacchetto con Node.js

Come semplificare l'esecuzione di script in NPM, Yarn e PNPM

Se hai script personalizzati nel tuo file package.json, come "npm my-script" o "yarn my-script", funzioneranno solo con il gestore di pacchetti che definisci. Ma NPM offre un'API per chiamare ogni volta l'eseguibile corrente, senza specificarlo esplicitamente.

{
  "scripts": {
    "cleanup": "./clean-up.js",
    "copy": "./copy.js",
    "prepare": "npm run cleanup && npm run copy"
  }
}

Usando $npm_execpath

Usando la stringa "$npm_execpath" invece di "npm" o "yarn" (o un altro gestore di pacchetti come "pnpm"), questo script funzionerà con ogni gestore di pacchetti, indipendentemente da ciò che lo sviluppatore attuale ha utilizzato per chiamare lo script originale .

{
  "scripts": {
    "cleanup": "./clean-up.js",
    "copy": "./copy.js",
    "prepare": "$npm_execpath run cleanup && $npm_execpath run copy"
  }
}

È compatibile su tutte le macchine?

Purtroppo, l'utilizzo di "$npm_execpth" per far funzionare gli script con qualsiasi gestore di pacchetti non funziona in modo affidabile su macchine su cui è installato Windows.

Qual è il modo più affidabile per chiamare gli script in package.json?

Pertanto, il modo più affidabile per chiamare gli script personalizzati nel file package.json è ancora quello di definire esplicitamente l'eseguibile del gestore di pacchetti e assicurarsi che il team utilizzi solo quello.

È meglio sui dispositivi che non eseguono Windows, dove puoi usare "$npm_execpath" per eseguire in modo affidabile quegli script.