npm (und Garn) übergibt viele Daten aus package.json als Umgebungsvariablen an Skripte. Verwenden Sie npm run env
, um sie alle zu sehen. Dies ist in https://docs.npmjs.com/misc/scripts#environment dokumentiert und gilt nicht nur für "Lifecycle" -Skripte wie, prepublish
sondern auch für alle von npm run
.
Sie können auf diesen internen Code zugreifen (z. B. process.env.npm_package_config_port
in JS), aber sie stehen der Shell, in der die Skripte ausgeführt werden, bereits zur Verfügung, sodass Sie auch als $npm_...
Erweiterungen in den "Skripten" darauf zugreifen können (Unix-Syntax funktioniert unter Windows möglicherweise nicht?).
Der Abschnitt "config" scheint für diese Verwendung vorgesehen zu sein:
"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/"
}
Eine wichtige Eigenschaft dieser "Konfigurations" -Felder ist, dass Benutzer sie überschreiben können, ohne package.json zu ändern !
$ 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
Siehe npm config und yarn config docs.
Es scheint , dass Garn liest ~/.npmrc
so npm config set
beide betrifft, sondern yarn config set
schreibt ~/.yarnrc
, so dass nur Garn es sieht :-(