यदि आप कुछ समय से कोडिंग कर रहे हैं, तो आप पर्यावरण चर के महत्व और इसकी भूमिका को जानते हैं, और एक बग का पता लगाने का दर्द भी जानते हैं जो सिर्फ इसलिए हुआ था क्योंकि आपके प्रोजेक्ट में एक खतरनाक एनवी वैरिएबल सेट नहीं किया गया था। , ज़ोर-ज़ोर से हंसना!
इस साल की शुरुआत में, मैंने एक उत्पाद आधारित स्टार्टअप में फुल स्टैक डेवलपर इंटर्न के रूप में काम किया। जैसे-जैसे परियोजना बढ़ती गई, पर्यावरण चर की संख्या भी बढ़ती गई। और, हर कोई अलग-अलग शाखाओं पर अलग-अलग सुविधाओं पर काम कर रहा था, इसलिए हमें नहीं पता था कि किसी ने अपनी शाखा में कुछ नए एनवी वैरिएबल पेश किए हैं जो बाद में मुख्य शाखा में विलय हो गए। इससे समस्याएँ पैदा हुईं जब मैंने अपनी शाखाएँ तैनात करने का प्रयास किया, मुझे पता था कि परियोजना में एक नया env var जोड़ा गया है।
फिर, बाद में मुझे टी3 स्टैक से परिचय हुआ और इसमें एनवी वेरिएबल्स में प्रकार की सुरक्षा जोड़ने का एक शानदार समाधान था। मैं तो यह भी नहीं जानता था कि ऐसा कोई समाधान मौजूद है। जब आपको इसकी कम से कम उम्मीद हो तो कुछ नया सीखना हमेशा अच्छा लगता है। T3 स्टैक आपके अनुप्रयोगों में प्रकार की सुरक्षा जोड़ने के लिए zod और @t3-oss/env-nextjs पैकेज का उपयोग करता है जो मुझे बहुत पसंद आया। उसके बाद, मैंने अपने एनवी वेरिएबल्स को हमेशा टाइप-सुरक्षित करने की प्रतिबद्धता जताई, चाहे कुछ भी हो।
यदि आप एक नया प्रोजेक्ट शुरू कर रहे हैं, या पहले से ही एक टीम में काम कर रहे हैं, तो मैं आपको अत्यधिक अनुशंसा करता हूं कि कृपया अपने एनवीएस में प्रकार की सुरक्षा जोड़ें। बस इसे जोड़ने से आपके कोडबेस में समस्याओं का पता लगाने के आपके प्रयास बच जाएंगे।
यहां बताया गया है कि आप इसे अपने प्रोजेक्ट में कैसे जोड़ सकते हैं। यह काफी सरल है।
ज़ोड एक हल्का, तेज़, स्कीमा घोषणा और सत्यापन पुस्तकालय है। एक स्कीमा एक साधारण स्ट्रिंग, संख्या से लेकर जटिल ऑब्जेक्ट प्रकार तक कुछ भी हो सकता है।
import {z} from 'zod'; const myBoolean = z.boolean(); myBoolean.parse('true'); // throws error myBoolean.parse(true) // valid
import { z } from 'zod'; const userSchema = z.object({ name: z.string(), age: z.number(), address: z.object({ house_no: z.string(), locality: z.string(), city: z.string(), state: z.string(), }) });
आप एक साधारण ऑब्जेक्ट स्कीमा बना सकते हैं या नेस्टेड ऑब्जेक्ट स्कीमा बना सकते हैं।
यह बस एक पैकेज है जो हमें env वेरिएबल्स में प्रकार की सुरक्षा जोड़ने में मदद करेगा
अपने प्रोजेक्ट के मूल में एक env.js फ़ाइल बनाएं।
import {createEnv} from "@t3-oss/env-nextjs"; import {z} from "zod"; export const env = createEnv({ /* * Serverside Environment variables, not available on the client. * Will throw if you access these variables on the client. */ server: { DB_URI: z.string().url(), }, /* * Environment variables available on the client (and server). * * You'll get type errors if these are not prefixed with NEXT_PUBLIC_. */ client: { NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: z.string().min(1), }, /* * Due to how Next.js bundles environment variables on Edge and Client, * we need to manually destructure them to make sure all are included in bundle. * * You'll get type errors if not all variables from `server` & `client` are included here. */ runtimeEnv: { DB_URI: process.env.DATABASE_URL, NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY, }, });
import {env} from '@/env'; const CLERK_PUBLISHABLE_KEY = env.NEXT_PUBLISHABLE_KEY;
यदि आप अपना कर्सर NEXT_PUBLISHABLE_KEY के ऊपर घुमाते हैं, तो आप देख सकते हैं कि वह मान स्ट्रिंग के रूप में टाइप किया गया है, इसका मतलब है कि हमारे env वेरिएबल अब टाइप हो गए हैं।
हमने टाइप सेफ एनवी वैरिएबल जोड़े हैं, लेकिन यह हर बिल्ड टाइम पर नहीं चलेगा। हमें अपनी नई बनाई गई फ़ाइल को अपनी अगली.config.js फ़ाइल में आयात करना होगा। आप उसके लिए unjs/jiti पैकेज का उपयोग कर सकते हैं।
सबसे पहले, npm से jiti pacakge इंस्टॉल करें।
import { fileURLToPath } from "node:url"; import createJiti from "jiti"; const jiti = createJiti(fileURLToPath(import.meta.url)); jiti("./app/env");
import.meta.url के साथ काम करते समय, यह उस फ़ाइल का यूआरएल प्रदान करता है जिस पर आप वर्तमान में काम कर रहे हैं। हालाँकि, इसमें एक फ़ाइल:/// उपसर्ग शामिल है, जो शायद आप नहीं चाहते होंगे। उस उपसर्ग को हटाने के लिए, आप नोड:यूआरएल मॉड्यूल से fileURLToPath फ़ंक्शन का उपयोग कर सकते हैं।
उदाहरण के लिए:
import {fileURLToPath} from 'node:url'; // Convert the file URL to a path const filename = fileURLToPath(import.meta.url);
अब, यदि आपके पास आवश्यक env वेरिएबल नहीं हैं, तो आपको इस तरह की एक त्रुटि दिखाई देगी -
import dotenv from "dotenv"; import { z } from "zod"; dotenv.config(); const schema = z.object({ MONGO_URI: z.string(), PORT: z.coerce.number(), JWT_SECRET: z.string(), NODE_ENV: z .enum(["development", "production", "test"]) .default("development"), }); const parsed = schema.safeParse(process.env); if (!parsed.success) { console.error( "❌ Invalid environment variables:", JSON.stringify(parsed.error.format(), null, 4) ); process.exit(1); } export default parsed.data;
नोड.जेएस परियोजनाओं में हम बस एक ज़ोड स्कीमा बनाएंगे और इसे हमारी प्रक्रिया.env के विरुद्ध पार्स करेंगे ताकि यह जांचा जा सके कि सभी एनवी चर सेट हैं या नहीं।
import express from "express"; import env from "./env"; const app = express(); const PORT = env.PORT || 5000; // PORT is type safe here.... app.listen(PORT, () => { console.log("Connected to server on PORT ${PORT}"); connectDB(); });
इस तरह आप अपने एनवी वेरिएबल्स में प्रकार की सुरक्षा जोड़ते हैं। मुझे आशा है कि आपने इस ट्यूटोरियल में कुछ नया सीखा होगा।
हैप्पी कोडिंग!! ?
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3