O npm (e yarn) passa muitos dados do package.json para scripts como variáveis de ambiente. Use npm run env
para ver todos eles. Isso está documentado em https://docs.npmjs.com/misc/scripts#environment e não é apenas para scripts de "ciclo de vida", como prepublish
também qualquer script executado por npm run
.
Você pode acessar esses códigos internos (por exemplo, process.env.npm_package_config_port
em JS), mas eles já estão disponíveis para o shell que está executando os scripts, para que você também possa acessá-los como $npm_...
expansões nos "scripts" (sintaxe unix, pode não funcionar no Windows?).
A seção "config" parece destinada a esse 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/"
}
Uma qualidade importante desses campos "config" é que os usuários podem substituí-los sem modificar o 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
Consulte os documentos de configuração do npm e de configuração do fio .
Parece que fio lê ~/.npmrc
tão npm config set
afeta tanto, mas yarn config set
escreve ~/.yarnrc
, tão somente fio vai vê-lo :-(