npm (e yarn) pasa muchos datos de package.json a scripts como variables de entorno. Use npm run env
para verlos a todos. Esto está documentado en https://docs.npmjs.com/misc/scripts#environment y no es solo para scripts de "ciclo de vida", prepublish
sino también para cualquier script ejecutado por npm run
.
Puede acceder a estos códigos internos (por ejemplo, process.env.npm_package_config_port
en JS), pero ya están disponibles para el shell que ejecuta los scripts, por lo que también puede acceder a ellos como $npm_...
expansiones en los "scripts" (¿la sintaxis de Unix podría no funcionar en Windows?).
La sección "config" parece destinada a este uso:
"name": "myproject",
...
"config": {
"port": "8010"
},
"scripts": {
"start": "node server.js $npm_package_config_port",
"test": "wait-on http://localhost:$npm_package_config_port/ && node test.js http://localhost:$npm_package_config_port/"
}
Una cualidad importante de estos campos de "configuración" es que los usuarios pueden anularlos sin modificar package.json !
$ npm run start
> myproject@0.0.0 start /home/cben/mydir
> node server.js $npm_package_config_port
Serving on localhost:8010
$ npm config set myproject:port 8020
$ git diff package.json # no change!
$ cat ~/.npmrc
myproject:port=8020
$ npm run start
> myproject@0.0.0 start /home/cben/mydir
> node server.js $npm_package_config_port
Serving on localhost:8020
Ver npm config y yarn config docs.
Parece que el hilo se lee ~/.npmrc
de manera npm config set
afecta a ambos, pero yarn config set
escribe a ~/.yarnrc
, por lo que sólo hilo de lo verá :-(