"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أفضل طريقة لتكوين متغيرات البيئة والبيئات المتعددة في Nest.js

أفضل طريقة لتكوين متغيرات البيئة والبيئات المتعددة في Nest.js

تم النشر بتاريخ 2024-08-16
تصفح:170

The Best way to configure environment variables and multi environments in Nest.js

ما أحب حقًا في Nest.js هو أنه إطار عمل Node.js قوي وكامل يمنحك حلولاً كاملة معتمدة للبناء تطبيقات الواجهة الخلفية.

يحتوي على دعم TypeScript مدمج منذ البداية ويجمع عناصر OOP (البرمجة الشيئية)، FP (البرمجة الوظيفية)، وFRP (البرمجة التفاعلية الوظيفية)، كما يقول الموقع الرسمي.

كما أنها تتمتع بهندسة معمارية منذ البداية، وهو أمر رائع بالنسبة لشخص مثلي يحب العمل مع مشاريع معمارية جيدة التنظيم.

التوثيق وحده مثير للإعجاب للغاية، ويغطي كل جانب، بما في ذلك كيفية تعيين متغيرات البيئة، ولكن بالنسبة لي
لم أفهم تمامًا كيفية تعيين بيئات متعددة.

ربما لأنني جديد على Node.js و Nestjs، ومع ذلك، عندما بحثت في الإنترنت عن مقالات، كانوا دائمًا يظهرون طريقة تستخدم مكتبة dotenv مباشرة بدلاً من استخدام Nestjs محليًا، والتي تستخدم dotenv ضمن كَبُّوت.

وبعد عدة ساعات من النظر في المقالات بجانب الوثائق، توصلت إلى حل أصلي لـ Nestjs واعتقدت أنني سأشاركه.


أولاً

لنفترض أننا بحاجة إلى بيئتين لمشروعنا 'dev' و 'prod'
ونحتاج إلى متغيري بيئة لكل بيئة: PORT و DATABASE_URL.

1- قم بإنشاء ملفين .env لتخزين  PORT و DATABASE_URL وتسمية الملفات ( .env.dev و .env.prod.)

PORT=3500

DATABASE_URL="file:./dev.db"`

2- قم بإنشاء متغير env يسمى NODE_ENV، ولكن هذه المرة بدلاً من تخزينه في ملف .env، سنقوم بإدخاله في نصوص البداية الخاصة بـ dev وprod.

يمكن أن يختلف الإعداد NODE_ENV عبر الأنظمة الأساسية (Windows أو mac أو Linux)، لذلك سنقوم بتثبيت حزمة cross-div للسماح لنا بتعيين متغيرات البيئة عبر الأنظمة الأساسية.

التثبيت باستخدام npm

$ npm install --save-dev cross-env

أو باستخدام pnpm

$ pnpm install --save-dev cross-env

ثم قم بتعديل البرامج النصية package.json لاستخدام cross-env:

"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

$ npm i --save @nestjs/config

بنم

$ pnpm i --save @nestjs/config

4- استخدم وحدة التكوين :

@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')
    );
  }
}
بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/ahmed_hyperov/the-best-way-to-configure-environment-variables-and-multi-environments-in-nestjs-31fi?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3