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
, тому бачить це лише пряжа :-(