прелюдия
в современном фронтенд проекте.env
Файлы видны везде, и в проекте есть некоторые элементы конфигурации, которые можно использовать в проекте.Хотя это незаметная вещь, эти.env
Файлы полезны и значимы во фронтенд-инжиниринге.
Давайте посмотрим на эту короткую статью.
process.env
Текущие интерфейсные проекты все используютNode
как вспомогательный инструмент разработки, аprocess
даNode.js
Глобальная переменная в , которая предоставляет информацию о текущем процессе Node.js и управляет им. а такжеprocess
серединаenv
Он возвращает объект, содержащий контекст пользователя.
Другими словами, можно пройтиprocess.env
Получить информацию о текущей среде выполнения проекта.
Основная информация о среде под Mac:
// index.js
console.log(Object.keys(process.env));
Установить переменные среды
1. Командная строка
Когда вам нужно добавить некоторые пользовательские конфигурации в переменные среды, вы можете установить их непосредственно через командную строку:
console.log(process.env.PROT)
PROT=10086 node index.js
На этом этапе переменные среды запуска проекта имеютPROT
.
Если вам нужно настроить другие переменные, вы можете продолжить добавлять параметры в виде ключевых значений:
PROT=10086 NDOE_DEV=development node index.js
Хотя этот метод очень прост, он также имеет много недостатков:
- Низкая читабельность: не могу интуитивно увидеть конфигурацию переменных среды (острые глаза)
- Легко ошибиться: если не только номер порта, но и информацию базы данных, ключ приложения и т. д., введите все в одну строку (ручная собачья голова)
- Сложно управлять: как запомнить или управлять всеми переменными окружения и их значениями (ручная собачья голова)
Итак, есть следующий способ.
2. .env-файл
Создайте
Создается непосредственно в корневом каталоге проекта.env
файл и введите переменные среды и их значения.
NDOE_ENV=development
PROT=10086
APP_KEY=***********
HOST_URL=**********
⚠️Внимание:не делай.env
Текст помещен в управление версиями кода, потому что эти переменные среды являются закрытыми данными в проекте, иначе они рискуют быть раскрытыми.
читать
Создайте.env
файл, вы можете написать свой собственный код, чтобы найти и проанализировать файл и записать его в свой проект, или использовать стороннийnpm
пакеты, такие какdotenv
, нажмитездесьПроверьте репо.
yarn add dotenv
// .env
PROT=10086
const dotenv = require('dotenv');
dotenv.config();
console.log(process.env.PROT); // 10086
Теперь, когда вы выполняете командный сценарий, вам не нужно передавать переменную среды и ее значение в.env
Конфигурация каждой переменной среды также может быть просмотрена и более интуитивно управляема в файле.
Лучшая организация
Если вы не упорядочите переменные окружения, при их использовании это будет выглядеть так:
process.env.PORT
Но раз уж переменных окружения много, везде ли это используется? Или лучше централизованно управлять всеми переменными среды?
Очевидно последнее.
Рефакторинг и обслуживание более сложны, потому что переменные напрямую ссылаются везде, где они необходимы, а не централизованно управляют ими.
такСоздайте модуль, отвечающий за сбор переменных окруженияЯвляется ли лучшим образом, что позволяет легко посмотреть на переменные среды один раз и сопоставьте их на читаемые человеком имена.
Организовать вручную
Создатьconfig.js
файл, затем запишите переменные, назовите их для удобочитаемых свойств, сопоставьте их и экспортируйте.
Например:
const dotenv = require('dotenv');
dotenv.config();
module.exports = {
hostUrl:process.env.HOST_URL,
secretKey:process.env.API_KEY,
port:process.env.PORT
};
Затем вы можете использовать его следующим образом:
const {port} = require('./ config');
console.log(`端口为:$ {port}`); // 10086
Какая от этого польза?
- Организация файлов проекта стала более интуитивно понятной и разумной.
- Четко знать взаимосвязь отображения переменных среды
- Переменные переименованы в более читаемые свойства.
- Свойства конфигурации, которые могут добавлять другие переменные, не относящиеся к среде
Но если вы хотите добавить новую переменную среды, вы должны добавить ее вconfig
в модуле.
Это ручной способ, так есть ли автоматический способ собрать его?
Конечно, есть!
автоматическая организация
вышеупомянутые третьи лицаNPM
Мешокdotenv
просто сделай это.
// config.js
const dotenv = require('dotenv');
const result = dotenv.config();
if (result.error) {
throw result.error;
}
const { parsed: envs } = result;
console.log(envs);
module.exports = envs;
Затем на него можно ссылаться в других модулях следующим образом:
const { HOST_URL, API_KEY, PROT } = require('./config');
Итак, какой способ вам нужно использовать сейчас, зависит от вас, независимо от того, каким образом вы должны учитывать следующее:dotenv
Стать зависимостью для прогона проекта.
Рекомендуется использовать ручной способ организации переменных окружения, чтобы можно было также удалитьdotenv
Зависимости, но только если вам нужно сделать что-то еще: Предварительно загрузить переменные среды.
уменьшить зависимость
В обычном проекте будет много зависимостей, но следует подумать, как свести зависимости к минимуму,dotenv
этоnpm
Пакеты действительно удобны, но это не обязательно должно быть зависимостью среды выполнения проекта.dotenv
Предоставляет возможность предварительной загрузки переменных вне вашего кода.
но как удалитьdotnev
Как насчет зависимостей времени выполнения, а затем сохранения его функций?
1. Во время установкиdotenv
При установке в качестве зависимости разработки (dev) удалитеdotenv
Весь соответствующий код.
2. Затем используйте-require(-r)
этот вариант для предварительной загрузкиdotenv
.
// config.js
module.exports = {
port: process.env.PORT
};
// index.js
const {port} = require('./config');
console.log(`端口号为:${port}`);
node -r dotenv/config index.js
Производственная среда
Увидев это, некоторые люди скажут, что среду разработки (разработки) можно пройти черезdotenv
preload для чтения переменных среды, но как насчет производства?
В 12-факторном руководстве по созданию приложений также указано, что приложение должно быть отделено от конфигурации.Лучший способ — сохранить его в переменных среды, думая, что эти конфигурации в основном являются частной информацией, такой как номера портов, учетные данные служебной учетной записи, ссылки на базы данных и т. д. Если конфигурация в проекте сохранена в коде или добавлено управление версиями кода, то ваш проект имеет высокую вероятность раскрытия этой частной информации.
Если вы не знаете, что такое 12 элементов, вы можете прочитать «Расширение знаний! Создайте свое приложение с помощью этих 12 элементов».
Итак, согласноЭлемент конфигурации (config)От этого фактора,.env
Файл является частным файлом и не должен находиться под контролем версий.
Если он работает на облачном сервере, для его настройки можно использовать функции, предоставляемые поставщиком облачных услуг. Или используйте стороннюю сервисную платформуAzureдля управления переменными среды. Вы можете запустить проект Node через его интерфейс командной строки, а затем получить информацию о переменных среды с платформы облачных служб.
если вDocker
работаете, вы можете использоватьDocker
функция для загрузки переменных окружения.
Подробная информация о том, как настроить переменные среды в производственной среде, будет объяснена в следующей статье.
Как поделиться
из-за.env
Файл предназначен для сохранения информации о конфигурации проекта.Эта информация является частной и не может быть раскрыта внешнему миру.Так как же одновременно поделиться этой информацией о конфигурации с другими участниками проектной группы?
.env.example
Может быть создан в корневом каталоге проекта.env.example
файл, запишите значения ключей всех переменных среды, а затем запишите ложные значения или описания значений ключей, в файле проектаREADME.md
В документации объясняется, как получить значение установленной переменной среды.
Например:
// .env.example
APP_ENV=development
NODE_ENV=development
HOST=app.test.com
PORT=10086
GOOGLE_MAP_API_KEY=the-google-map-api-key
Информация о конфигурации переменных среды также может храниться в сторонних системах управления хранением, таких какVaultОбеспечивает безопасное хранение (ключ/значение) и управление токенами, паролями, сертификатами, ключами API и т. д.
постоянная конфигурация
через самодельные сервисы илиAzureСлужба постоянной конфигурации с открытым исходным кодом, а затем используйте SDK для получения переменных среды на сервере.
Однако общие поставщики облачных услуг будут упаковывать эту услугу, поскольку только сервер и служба постоянной конфигурации предоставляются одним поставщиком, поставщик может связать постоянную конфигурацию с разрешениями сервера, так что сторонний сервер не может даже получить токен. , Доступ к конфигурации.
служба шифрования
Если уровень безопасности проекта относительно высок, то можно использовать услуги шифрования.
- Зарегистрируйтесь на платформе шифрования и получите ключ
- Установите переменные среды на платформе шифрования, и платформа шифрования зашифрует содержимое.
- Используйте Node SDK для получения зашифрованного текста, выводимого платформой шифрования.
- Расшифровать в открытый текст с помощью SDK и ключа
наконец
Переменные среды должны существовать вне кода проекта и доступны только во время выполнения проекта, чтобы конфигурация проекта не была связана с его кодом, что позволяет легко развертывать проект в различных средах.
дляNode.js
В качестве современного внешнего приложения для вспомогательной разработки вы можете использовать переменные среды через глобальную переменную process.env или задавать переменные среды при выполнении команд узла, или использоватьdotenv
.
Наконец, обратите внимание.env
Файлы никогда не должны существовать в репозитории исходного кода, присоединяйтесь к управлению версиями кода.
Справочная статья: