ما أحب حقًا في 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') ); } }
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3