Переменные среды не имеют отношения к вашему приложению узла! Единственная роль process.env - предоставить вашему приложению переменные системной среды. Если вам нужно добавить переменные среды, вы должны добавить их в свой файл конфигурации docker / vm / vagrant, а не в стартовый скрипт вашего приложения.
Если вы собираетесь передать аргумент экземпляру узла, лучший и единственный способ - использовать node process.argv вместо rocess.env.
Единственный случай, когда вам нужно использовать process.env, - это то, что ваш облачный провайдер применяет некоторые конфигурации, которым должно соответствовать ваше приложение, даже в этом случае они устанавливают переменные среды, а не вы.
Вот как передать аргументы вашему приложению. Вы, наверное, уже знали.
node app.js port=5000 profile=admin
Потом,
/**
* Get the passed node argument by key.
* @param key of node argument
* @returns {string}
*/
export function getArg(key: string): string {
return process.argv
.map(e => e.split('=')) // [ [a b] , [c d]]
.filter(e => e.length == 2) //[[a b], [c d]]
.map(e => ({ [e[0]]: e[1] })) // [{a:b}, {c:d}]
.reduce((p, c) => ({ ...p, ...c }))[key]
}
Пример сценария:
- Приложение имеет несколько профилей администратора, общедоступного и подписчика.
- Приложение запускается только по запросу пользователя (например, администратор хочет запустить приложение, затем вы запускаете приложение в профиле администратора)
package.json
{
"start:admin":"node app.js profile=admin port=5000",
"start:public":"node app.js profile=public port=5001",
"start:subscriber":"node app.js profile=subscriber port=5002",
}
Просто попробовал объяснить нюанс между process.env и process.argv.
Не принимайте близко к сердцу!
person
Ahmet Emrebas
schedule
25.07.2021