Scripts indépendants des packages avec Node.js

Comment simplifier l'exécution de scripts dans NPM, Yarn et PNPM

Si vous avez des scripts personnalisés dans votre fichier package.json, comme "npm my-script" ou "yarn my-script", ils ne fonctionneront qu'avec le gestionnaire de packages que vous définissez. Mais NPM propose une API pour appeler l'exécutable courant à chaque fois, sans le spécifier explicitement.

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

Utilisation de $npm_execpath

En utilisant la chaîne "$npm_execpath" au lieu de "npm" ou "yarn" (ou un autre gestionnaire de packages comme "pnpm"), ce script fonctionnera avec chaque gestionnaire de packages, quel que soit ce que le développeur actuel a utilisé pour appeler le script d'origine .

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

Est-ce compatible sur toutes les machines ?

Malheureusement, l'utilisation de "$ npm_execpth" pour faire fonctionner les scripts avec n'importe quel gestionnaire de packages ne fonctionne pas de manière fiable sur les machines sur lesquelles Windows est installé.

Quel est le moyen le plus fiable d'appeler des scripts dans package.json ?

Par conséquent, le moyen le plus fiable d'appeler vos scripts personnalisés dans le fichier package.json consiste toujours à définir explicitement l'exécutable du gestionnaire de packages et à vous assurer que votre équipe n'utilise que celui-ci.

C'est mieux sur les appareils qui n'exécutent pas Windows, où vous pouvez utiliser "$ npm_execpath" pour exécuter ces scripts de manière fiable.