Переменные окружения и аргументы
Как передать программе настройки снаружи: секреты через окружение, параметры через аргументы.
Переменные окружения: process.env
Переменные окружения — это пары «ключ = значение», которые ОС передаёт программе. В них держат настройки, которые меняются между средами (разработка, продакшен), и секреты (пароли, ключи API), которые нельзя хранить в коде.
В Node к ним обращаются через объект process.env:
console.log(process.env.NODE_ENV); // 'development' или 'production'
console.log(process.env.PORT); // порт сервера
console.log(process.env.DATABASE_URL); // строка подключения к БД
Передать переменную можно прямо при запуске:
PORT=8080 NODE_ENV=production node app.js
Значение по умолчанию
Если переменная не задана, process.env вернёт undefined. Поэтому обычно подставляют значение по умолчанию:
// если PORT не задан — берём 3000
const port = process.env.PORT || 3000;
console.log("Сервер запустится на порту", port);
Логика выбора значения — чистый JavaScript, она реально исполнится:
function getConfig(env) {
return {
port: env.PORT || 3000,
mode: env.NODE_ENV || "development",
debug: env.DEBUG === "true"
};
}
console.log(getConfig({ PORT: "8080", DEBUG: "true" }));
console.log(getConfig({}));
Вывод:
{ port: '8080', mode: 'development', debug: true }
{ port: 3000, mode: 'development', debug: false }
Обратите внимание: все значения process.env — строки. Число "8080" придётся привести через Number(), а булево сравнить со строкой "true".
Файл .env
Перечислять переменные в командной строке неудобно. На практике их кладут в файл .env (его не коммитят в git), а читают пакетом dotenv или встроенной поддержкой свежего Node:
PORT=8080
NODE_ENV=production
DATABASE_URL=postgres://localhost/mydb
Аргументы командной строки: process.argv
Аргументы, переданные при запуске, лежат в массиве process.argv. Первые два элемента — путь к node и путь к скрипту, дальше идут ваши аргументы:
// запуск: node greet.js Аня 25
console.log(process.argv);
// [
// '/usr/bin/node',
// '/path/greet.js',
// 'Аня',
// '25'
// ]
const name = process.argv[2];
const age = process.argv[3];
console.log(`${name}, возраст ${age}`);
Обычно реальные аргументы достают, отрезав первые два элемента: process.argv.slice(2).
Разбор аргументов — обычный JS
Превратить «сырой» массив аргументов в удобный объект — чистая работа с массивом и строками:
// имитируем process.argv.slice(2)
const args = ["--name=Аня", "--age=25", "--admin"];
const options = {};
for (const arg of args) {
const clean = arg.replace(/^--/, "");
if (clean.includes("=")) {
const [key, value] = clean.split("=");
options[key] = value;
} else {
options[clean] = true; // флаг без значения
}
}
console.log(options);
Вывод:
{ name: 'Аня', age: '25', admin: true }
Итог
process.env— переменные окружения; в них хранят настройки и секреты.- Все значения
process.env— строки; используйте|| значениепо умолчанию. - Секреты держат в
.env(не в git), читают черезdotenv. process.argv— аргументы запуска; реальные берут с.slice(2).