npm (и пряжа) передает много данных из package.json в сценарии как переменные среды. Используйте, npm run env
чтобы увидеть их всех. Это задокументировано в https://docs.npmjs.com/misc/scripts#environment и предназначено не только для сценариев «жизненного цикла», таких как, prepublish
но также для любых сценариев, выполняемых npm run
.
Вы можете получить доступ к этим внутри кода (например, process.env.npm_package_config_port
в JS), но они уже доступны для оболочки, выполняющей сценарии, так что вы также можете обращаться к ним как к $npm_...
расширениям в «сценариях» (синтаксис unix, может не работать в Windows?).
Раздел "config", кажется, предназначен для этого использования:
"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/"
}
Важным качеством этих полей «config» является то, что пользователи могут переопределять их, не изменяя 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
Смотрите npm config и документы по конфигурации пряжи .
Похоже, что пряжа читает ~/.npmrc
так npm config set
влияет на обоих, но yarn config set
пишет ~/.yarnrc
, так что только пряжа будет видеть это :-(