جب آپ npm کمانڈز چلاتے ہیں تو کیا ہوتا ہے؟

آپ ایک npm کمانڈ پر انٹر دباتے ہیں۔ آپ کا پروجیکٹ بن جاتا ہے۔ یہ کسی جادو کی طرح محسوس ہوتا ہے۔

یہ جادو نہیں ہے۔ یہ نیٹ ورک ریکویسٹس، کوڈ پارسنگ اور فائل آپٹیمائزیشن کا ایک سلسلہ ہے۔

اندھا دھند کمانڈز چلانا بند کریں۔ اس کے بجائے اس کے انجن کو سمجھیں۔

یہاں ان 6 بنیادی کمانڈز کے پیچھے ہونے والے عمل کی تفصیل ہے جو آپ روزانہ استعمال کرتے ہیں۔

  1. npm install

یہ کمانڈ آپ کی package.json فائل کو پڑھتی ہے۔ یہ آپ کے ٹولز کے صحیح ورژن تلاش کرنے کے لیے کلاؤڈ رجسٹری سے رابطہ کرتی ہے۔

  • یہ رجسٹری سے پیکجز ڈاؤن لوڈ کرتی ہے۔
  • یہ node_modules فولڈر بناتی ہے۔
  • یہ ایک dependency tree بناتی ہے۔
  • یہ درست ورژن ریکارڈ کرنے کے لیے package-lock.json کو اپ ڈیٹ کرتی ہے۔
  1. npm run format:check

یہ تصدیق کا ایک مرحلہ ہے۔ یہ بغیر کچھ تبدیل کیے چیک کرتا ہے کہ آیا آپ کا کوڈ آپ کے اسٹائل رولز کی پیروی کرتا ہے یا نہیں۔

  • یہ آپ کی فائلوں کا ایک ورچوئل لے آؤٹ بناتی ہے۔
  • یہ آپ کی فائلوں کا موازنہ Prettier جیسے رولز کے ساتھ کرتی ہے۔
  • اگر آپ کی سپیسنگ یا سنٹیکس غلط ہو تو یہ غلطیوں کی نشاندہی کرتی ہے۔

ان غلطیوں کو ٹھیک کرنے کے لیے، npm run format چلائیں۔ یہ کمانڈ آپ کی فائلوں کو درست اسٹائل میں دوبارہ لکھنے کے لیے Prettier کا استعمال کرتی ہے۔

  1. npm run lint

اسے اپنے کوڈ کے لیے ایک اسپیل چیکر (spellchecker) سمجھیں۔ ESLint ان غلطیوں کو تلاش کرتا ہے جو آپ کے لاجک کو خراب کرتی ہیں۔

  • یہ سنٹیکس (syntax) کی غلطیاں تلاش کرتا ہے۔
  • یہ غیر استعمال شدہ ویری ایبلز کی نشاندہی کرتا ہے۔
  • یہ مسنگ امپورٹس (missing imports) کا پتہ لگاتا ہے۔
  • یہ React Hook کے غلط استعمال کی نشاندہی کرتا ہے۔
  1. npm run build

یہ کمانڈ آپ کی ایپ کو حقیقی دنیا کے لیے تیار کرتی ہے۔ یہ ایک dist فولڈر بناتی ہے۔

  • یہ tree shaking کرنے کے لیے ایک بنڈلر کا استعمال کرتی ہے۔ یہ اس کوڈ کو ڈیلیٹ کر دیتی ہے جسے آپ نے امپورٹ تو کیا لیکن کبھی استعمال نہیں کیا۔
  • یہ minification کرتی ہے۔ یہ بائٹس بچانے کے لیے وائٹ سپیس کو ختم کرتی ہے اور ویری ایبلز کا نام بدل دیتی ہے۔
  • یہ CSS اور اثاثوں (assets) کو پروسیس کرتی ہے۔
  • یہ سرور کے لیے تیار، آپٹیمائزڈ اسٹیٹک فائلز فراہم کرتی ہے۔
  1. npm run dev

یہ آپ کا لوکل ڈویلپمنٹ سرور شروع کرتی ہے۔ اگر آپ Vite استعمال کرتے ہیں، تو یہ Native ES Modules کا استعمال کرتی ہے۔

  • یہ فائلز کو صرف اس وقت کمپائل کرتی ہے جب آپ کا براؤزر انہیں مانگتا ہے۔
  • یہ Hot Module Replacement (HMR) کے لیے WebSockets کا استعمال کرتی ہے۔
  • یہ پورے پیج کو ریفریش کیے بغیر آپ کے براؤزر میں ایڈٹ شدہ کوڈ کو فوری طور پر تبدیل کر دیتی ہے۔
  1. npm run preview

اسے ڈیپلائے کرنے سے پہلے اپنے کام کو دوبارہ چیک کرنے کے لیے استعمال کریں۔ یہ کمانڈ آپ کے سورس کوڈ کو نظر انداز کرتی ہے۔ یہ صرف آپ کے dist فولڈر کو دیکھتی ہے۔

  • یہ اس بات کی نقل (simulate) کرتی ہے کہ آپ کی ایپ Vercel یا AWS پر کیسی کام کرے گی۔
  • یہ آپ کے پروڈکشن بلڈ کو لوکل سرور پر چلاتی ہے۔

ٹرمینل کوئی بلیک باکس نہیں ہے۔ جب آپ اپنے ٹولز کو سمجھ لیتے ہیں، تو آپ تیزی سے ڈی بگ (debug) کر سکتے ہیں۔

جب آپ نے سیکھا کہ کوئی کمانڈ کیسے کام کرتی ہے، تو کس کمانڈ نے آپ کے ورک فلو کو بدل دیا؟ مجھے نیچے بتائیں۔

ٹرمینل کے پیچھے کا جادو: جب آپ npm کمانڈز چلاتے ہیں تو اصل میں کیا ہوتا ہے؟

کیا آپ نے کبھی سوچا ہے کہ جب آپ npm install ٹائپ کرتے ہیں تو پس منظر میں کیا ہوتا ہے؟ یہ جادو جیسا لگتا ہے، لیکن درحقیقت یہاں عمل کے کئی پیچیدہ مراحل چل رہے ہوتے ہیں۔ اس آرٹیکل میں، ہم npm کے کام کرنے کے طریقے کا گہرائی سے جائزہ لیں گے۔

npm کیا ہے؟

npm (Node Package Manager) Node.js کے لیے دنیا کا سب سے بڑا سافٹ ویئر رجسٹری اور پیکیج مینیجر ہے۔ یہ ڈویلپرز کو کوڈ کے ٹکڑوں (packages) کو شیئر کرنے، استعمال کرنے اور مینیج کرنے کی سہولت فراہم کرتا ہے۔

کمانڈ چلانے کا عمل: مرحلہ وار

جب آپ ٹرمینل میں npm install <package-name> جیسی کمانڈ چلاتے ہیں، تو درج ذیل مراحل طے پاتے ہیں:

1. کمانڈ کا تجزیہ (Command Parsing)

سب سے پہلے، npm کا CLI (Command Line Interface) آپ کی فراہم کردہ کمانڈ کو وصول کرتا ہے اور اس کے پیرامیٹرز کا تجزیہ کرتا ہے۔ اسے معلوم ہوتا ہے کہ آپ کیا کرنا چاہتے ہیں (مثلاً انسٹال کرنا، ان انسٹال کرنا، یا اپ ڈیٹ کرنا)۔

2. رجسٹری سے رابطہ (Registry Lookup)

npm آپ کی کمانڈ کے مطابق npm Registry سے رابطہ کرتا ہے۔ یہ ایک آن لائن ڈیٹا بیس ہے جہاں لاکھوں پیکیجز موجود ہیں۔ npm وہاں سے مطلوبہ پیکیج کی معلومات، جیسے کہ اس کا تازہ ترین ورژن اور اس کی تفصیلات حاصل کرتا ہے۔

3. ڈیپینڈینسی ریزولوشن (Dependency Resolution)

یہ مرحلہ سب سے زیادہ پیچیدہ ہے۔ آپ جو پیکیج انسٹال کرنا چاہتے ہیں، اسے خود کام کرنے کے لیے شاید کچھ اور پیکیجز کی ضرورت ہو۔ ان کو "Dependencies" کہا جاتا ہے۔

  • npm ایک Dependency Tree بناتا ہے۔
  • یہ دیکھتا ہے کہ کون سا ورژن سب سے موزوں ہے۔
  • یہ "Conflict" (تضاد) کو حل کرنے کی کوشش کرتا ہے تاکہ مختلف پیکیجز کے ورژن آپس میں ٹکرائیں نہیں۔

4. ڈاؤن لوڈنگ اور ایکسٹریکشن (Downloading & Extraction)

ایک بار جب تمام ضروری پیکیجز کی فہرست (Tree) تیار ہو جاتی ہے، تو npm انہیں رجسٹری سے ڈاؤن لوڈ کرنا شروع کر دیتا ہے۔ یہ فائلیں عام طور پر .tar.gz فارمیٹ میں ہوتی ہیں۔ ڈاؤن لوڈ ہونے کے بعد، انہیں ایکسٹریکٹ کر کے آپ کے پروجیکٹ کے node_modules فولڈر میں رکھ دیا جاتا ہے۔

5. فائل سسٹم میں تبدیلی (Updating Files)

انسٹالیشن کے بعد، npm آپ کی اہم فائلوں کو اپ ڈیٹ کرتا ہے:

  • package.json: اس میں نئے پیکیج کا نام اور ورژن شامل کیا جاتا ہے۔
  • package-lock.json: یہ فائل اس بات کو یقینی بناتی ہے کہ آپ کے ساتھی ڈویلپرز یا سرور پر بھی بالکل وہی ورژن انسٹال ہو جو آپ کے پاس ہے۔

خلاصہ

npm کا کام صرف فائلیں ڈاؤن لوڈ کرنا نہیں ہے، بلکہ یہ ایک پیچیدہ نظام ہے جو ورژن کنٹرول، ڈیپینڈینسی مینجمنٹ اور فائل سسٹم کے درمیان توازن برقرار رکھتا ہے۔ اس عمل کو سمجھنے سے آپ کو ڈیپینڈینسی کے مسائل (dependency issues) کو حل کرنے میں مدد ملتی ہے۔