Scripts independientes del paquete con Node.js

Cómo simplificar la ejecución de scripts en NPM, Yarn y PNPM

Si tiene scripts personalizados en su archivo package.json, como "npm my-script" o "yarn my-script", solo funcionarán con el administrador de paquetes que defina. Pero NPM ofrece una API para llamar al ejecutable actual cada vez, sin especificarlo explícitamente.

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

Usando $npm_execpath

Al usar la cadena "$npm_execpath" en lugar de "npm" o "yarn" (u otro administrador de paquetes como "pnpm"), este script funcionará con todos los administradores de paquetes, sin importar cómo haya usado el desarrollador actual para llamar al script original. .

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

¿Es compatible en todas las máquinas?

Lamentablemente, usar "$npm_execpth" para hacer que los scripts funcionen con cualquier administrador de paquetes no funciona de manera confiable en máquinas que tienen instalado Windows.

¿Cuál es la forma más confiable de llamar a los scripts en package.json?

Por lo tanto, la forma más confiable de llamar a sus scripts personalizados en el archivo package.json sigue siendo definir explícitamente el ejecutable del administrador de paquetes y asegurarse de que su equipo solo use ese.

Es mejor en dispositivos que no ejecutan Windows, donde puede usar "$npm_execpath" para ejecutar esos scripts de manera confiable.