Что мне действительно нравится в Nest.js так это то, что это мощный комплексный фреймворк node.js, который дает вам готовые решения для построения серверные приложения.
Он имеет встроенную поддержку TypeScript и сочетает в себе элементы ООП (объектно-ориентированное программирование), FP (функциональное программирование) и FRP (Функциональное реактивное программирование), как написано на официальном сайте.
У него также есть архитектура с самого начала, что удивительно для таких людей, как я, которые любят работать с хорошими структурированными архитектурными проектами.
Сама по себе документация очень впечатляет и охватывает все аспекты, включая установку переменных среды, но для меня
Я не совсем понял, как настроить несколько сред.
Возможно, потому, что я новичок в node.js иnesjs, однако, когда я искал в Интернете статьи, они всегда показывали способ использования библиотеки dotenv напрямую вместо встроенного использованияnesjs, который использует dotenv под капюшон.
И после многих часов просмотра статей рядом с документацией я разработал решение, встроенное в Nestjs, и решил поделиться им.
Первый
Предположим, нам нужны две среды для нашего проекта: 'dev' и 'prod'
и нам нужны две переменные среды для каждой среды: PORT и DATABASE_URL.
1. Создайте 2 файла .env для хранения PORT и DATABASE_URL и назовите эти файлы ( .env.dev и .env.prod.)
PORT=3500 DATABASE_URL="file:./dev.db"`
2. Создайте переменную env с именем NODE_ENV, но на этот раз вместо того, чтобы хранить ее в файле .env, мы внедрим ее в стартовые сценарии для разработки и производства.
Настройка NODE_ENV может различаться на разных платформах (Windows, Mac или Linux), поэтому мы установим пакет перекрестного разделения, который позволит нам устанавливать переменные среды на разных платформах.
установить с помощью npm
$ npm install --save-dev cross-env
или с помощью pnpm
$ pnpm install --save-dev cross-env
Затем измените скрипты package.json для использования перекрестного окружения:
"scripts": { "start:dev": "cross-env-shell NODE_ENV=dev nest start --watch", "start:prod": "cross-env-shell NODE_ENV=prod node dist/main", }
Итак, теперь, когда вы запускаете свое приложение с помощью
npm run start:dev
или
pnpm run start:dev
У вас есть NODE_ENV=dev, и вы можете использовать его во всем приложении.
3- Чтобы Nestjs мог читать файлы .env, нам нужно использовать ConfigModule и правильно его настроить, но сначала нам нужно его установить.
нпм
$ npm i --save @nestjs/config
пнпм
$ pnpm i --save @nestjs/config
4- Используйте ConfigModule :
@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: `.env.${process.env.NODE_ENV}`, }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
envFilePath: используется для указания другого пути для файла .env.
или прочитайте файл, отличный от файла .env по умолчанию
.env.${process.env.NODE_ENV} будет преобразовано в .env.dev и
Если мы запустим команду
npm run start:prod
.env.${process.env.NODE_ENV} будет преобразовано в .env.prod.
5- Как получить доступ к переменным среды
Для доступа к переменным окружения мы используем ConfigModule.
Мы можем использовать его в main.ts
async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); const port = configService.get('PORT'); await app.listen(port); }
или, если нам это нужно в другом месте, мы используем инъекцию.
например
@Injectable() export class AppService { constructor(private configService: ConfigService) {} getHello(): string { return ( this.configService.get('DATABASE_URL') ); } }
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3