yarn — Node.js के लिए एक वैकल्पिक पैकेज मैनेजर, जिसे Facebook ने Exponent, Google और Tilde के साथ मिलकर 2016 में बनाया। yarn ने npm 2-4 की गति और सुरक्षा समस्याओं को हल किया: समानांतर स्थापना, सख्त lock फ़ाइल और ऑफ़लाइन कैश। आज yarn React Native, Expo और मोनोरेपो में लोकप्रिय बना हुआ है। अधिक जानकारी के लिए yarn Documentation देखें।
मुख्य बिंदु
yarn (Yet Another Resource Negotiator) अक्टूबर 2016 में npm 2-4 की समस्याओं के जवाब के रूप में Facebook द्वारा जारी किया गया: धीमी स्थापना, lock फ़ाइल की कमी और असुरक्षित पैकेज। yarn ने समानांतर पैकेज डाउनलोड, नियतात्मक yarn.lock और चेकसम के माध्यम से अखंडता सत्यापन प्रस्तुत किया। 2020 में yarn ने Plug'n'Play और TypeScript-first दृष्टिकोण के साथ संस्करण 2 (Berry) में परिवर्तन किया।
yarn आर्किटेक्चर npm से अलग है: yarn पैकेजों को समानांतर में डाउनलोड करता है (npm संस्करण 5 से पहले — क्रमिक रूप से), प्रत्येक पैकेज को ~/.cache/yarn में बिना डुप्लिकेशन के कैश करता है और चेकसम के माध्यम से अखंडता सत्यापित करता है। yarn हर स्थापना पर yarn.lock उत्पन्न करता है, जबकि npm में package-lock.json केवल संस्करण 5 में दिखाई दिया।
yarn 2 (Berry, 2020) से शुरू करके, yarn को पूरी तरह से TypeScript में फिर से लिखा गया और यह Plug'n'Play, workspaces, मोनोरेपो के लिए constraints और विभिन्न स्रोतों (npm, git, tarball) से स्थापना प्रोटोकॉल का समर्थन करता है। yarn 3+ (2022) ने Zero-Installs जोड़ा — तत्काल स्थापना के लिए रिपॉजिटरी में कैश संग्रहीत करना बिना नेटवर्क के।
yarn install — मुख्य कमांड जो package.json और yarn.lock पढ़ता है और निर्भरताएँ स्थापित करता है। yarn पैकेजों को समानांतर में डाउनलोड करता है, जो npm 4 और पुराने संस्करणों की तुलना में स्थापना को 2-3 गुना तेज करता है। yarn ऑफ़लाइन कैश का उपयोग करता है: यदि कोई पैकेज पहले से किसी अन्य प्रोजेक्ट में डाउनलोड किया जा चुका है, तो इसे दोबारा डाउनलोड करने के बजाय कैश से कॉपी किया जाता है।
# yarn के मूल कमांड
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# इंटरैक्टिव अपडेट
$ yarn upgrade-interactive
# डुप्लिकेट पैकेज हटाएँ
$ yarn dedupe
yarn add — नया पैकेज स्थापित करने का कमांड। yarn add <package> dependencies में जोड़ता है, yarn add --dev — devDependencies में। yarn स्वचालित रूप से yarn.lock को अपडेट करता है। yarn upgrade पैकेजों को अर्थपूर्ण सीमा के भीतर नवीनतम संस्करणों में अपडेट करता है। yarn upgrade-interactive — अपडेट के लिए विशिष्ट पैकेज चुनने का इंटरैक्टिव मोड।
yarn cache — ~/.cache/yarn/v6 में एक वैश्विक कैश। प्रत्येक पैकेज चेकसम के साथ ZIP आर्काइव में एक बार संग्रहीत किया जाता है। yarn कैश स्वचालित रूप से साफ़ होता है, लेकिन आप मैन्युअल रूप से yarn cache clean चला सकते हैं। yarn cache dir कैश पथ दिखाता है। yarn cache list — कैश किए गए पैकेजों की सूची।
yarn.lock — एक lock फ़ाइल जो सभी निर्भरताओं और उनके ट्रांज़िटिव पैकेजों के सटीक संस्करणों को रिकॉर्ड करती है। package-lock.json (JSON) के विपरीत, yarn.lock एक सपाट संरचना के साथ YAML प्रारूप का उपयोग करता है। yarn.lock हमेशा yarn install या yarn add के दौरान स्वचालित रूप से उत्पन्न होता है — यह सुनिश्चित करता है कि सभी डेवलपर्स और CI सर्वर को पैकेजों का समान सेट मिले।
# yarn.lock संरचना का उदाहरण
react@^18.3.0:
version: "18.3.1"
resolution: "react@npm:18.3.1"
dependencies:
loose-envify: "^1.1.0"
checksum: "abc123def456..."
react-native@^0.76.0:
version: "0.76.3"
resolution: "react-native@npm:0.76.3"
dependencies:
react: "18.3.1"
checksum: "def789ghi012..."
yarn.lock फ़ील्ड: version — सटीक पैकेज संस्करण, resolution — स्रोत और संस्करण, dependencies — इसकी निर्भरताएँ, checksum — सत्यापन के लिए चेकसम। yarn.lock रिपॉजिटरी में कमिट किया जाता है और निर्भरताओं के लिए सत्य का एकमात्र स्रोत है। यदि yarn.lock और package.json भिन्न होते हैं, तो yarn चेतावनी जारी करता है।
Yarn constraints — मोनोरेपो के लिए नियम प्रणाली जो yarn.lock में निर्भरता संस्करणों की जाँच और प्रवर्तन करती है। constraints को Yarn Constraint Language का उपयोग करके yarn.constraints.js फ़ाइल में वर्णित किया जाता है। Constraints यह सुनिश्चित करने की अनुमति देते हैं कि मोनोरेपो में सभी पैकेज React या TypeScript के समान संस्करण का उपयोग करें।
React Native पारंपरिक रूप से yarn से निकटता से जुड़ा हुआ है। Expo CLI, React Native CLI और Create React Native App ने शुरू में yarn का उपयोग किया। React Native प्रोजेक्ट्स में, yarn.lock नेटिव मॉड्यूल के संस्करणों को लॉक करता है, जो CocoaPods (iOS) और Gradle (Android) के माध्यम से स्थिर संकलन के लिए अत्यंत महत्वपूर्ण है। साझा कोड वाले React Native मोनोरेपो में yarn workspaces लोकप्रिय हैं।
React Native मोनोरेपो में yarn workspaces: रूट package.json में "workspaces": ["packages/*", "mobile"] होता है। yarn install रूट स्तर पर एकल node_modules फ़ोल्डर बनाता है। पैकेज सिमलिंक के माध्यम से एक दूसरे को संदर्भित करते हैं। CocoaPods को अपडेट करने के लिए नेटिव निर्भरताएँ बदलने के बाद npx pod-install निष्पादित किया जाता है।
{
"private": true,
"workspaces": [
"packages/*",
"apps/mobile",
"apps/web"
],
"scripts": {
"mobile:start": "yarn workspace mobile start",
"mobile:ios": "yarn workspace mobile ios",
"lint": "yarn workspaces run lint"
}
}
Expo SDK 50+ आधिकारिक तौर पर npx create-expo-app के माध्यम से बनाए गए नए प्रोजेक्ट्स के लिए yarn की सिफारिश करता है। yarn Expo मॉड्यूल के साथ संगतता सुनिश्चित करता है और स्वचालित रूप से सही yarn.lock उत्पन्न करता है। yarn 3+ में Zero-Installs रिपॉजिटरी में कैश कमिट करने की अनुमति देता है — डेवलपर्स को git clone के बाद निर्भरताएँ स्थापित किए बिना उपयोग के लिए तैयार वातावरण मिलता है।
npm और yarn एक ही समस्या का समाधान करते हैं — Node.js पैकेजों का प्रबंधन। npm 5-7 के रिलीज़ के साथ, कार्यात्मक अंतर व्यावहारिक रूप से गायब हो गया। npm 7+ में workspaces, npm ci (yarn install --frozen-lockfile के समतुल्य) और समानांतर स्थापना शामिल है। हालाँकि, yarn विशिष्ट परिदृश्यों में लाभ बनाए रखता है: Plug'n'Play, Zero-Installs और एक परिपक्व constraints प्रणाली।
| विशेषता | npm | yarn |
|---|---|---|
| निर्माण वर्ष | 2010 | 2016 |
| Lock फ़ाइल | package-lock.json (JSON) | yarn.lock (YAML) |
| स्थापना | क्रमिक (npm 5+) | समानांतर |
| Plug'n'Play | नहीं | हाँ (yarn 2+) |
| Workspaces | हाँ (npm 7+) | हाँ |
| Zero-Installs | नहीं | हाँ (yarn 3+) |
| कैश | फ़्लैटनिंग के साथ node_modules | वैश्विक ~/.cache/yarn |
| कार्यान्वयन भाषा | JavaScript | TypeScript (yarn 2+) |
yarn कब चुनें: Expo SDK 50+ पर प्रोजेक्ट, बड़े मोनोरेपो (100+ पैकेज), टीमें जो त्वरित वातावरण सेटअप के लिए Zero-Installs को महत्व देती हैं, और विरासती प्रोजेक्ट जो पहले से yarn का उपयोग कर रहे हैं। npm कब चुनें: मानक create-react-app प्रोजेक्ट, Next.js, Vite, बिना विशिष्ट पैकेज मैनेजर आवश्यकताओं वाली टीमें।
yarn 4 (2024) ने बेहतर प्रदर्शन, मूल ESM समर्थन और बड़े मोनोरेपो के लिए अनुकूलन प्रस्तुत किया। npm 10+ सुरक्षा और संगतता पर ध्यान केंद्रित करके विकसित हो रहा है। आज npm और yarn के बीच चुनाव टीम की प्राथमिकताओं और विशिष्ट प्रोजेक्ट आवश्यकताओं का मामला है, न कि एक उपकरण की दूसरे पर तकनीकी श्रेष्ठता का।
अक्सर पूछे जाने वाले प्रश्न
yarn ने शुरू में समानांतर पैकेज स्थापना और आक्रामक कैशिंग के कारण गति में npm को पीछे छोड़ दिया। yarn.lock हर स्थापना पर स्वचालित रूप से उत्पन्न होता है, जबकि package-lock.json npm 5 में दिखाई दिया। yarn शून्य स्थापना समय के साथ node_modules का विकल्प Plug'n'Play प्रदान करता है। npm 7+ के साथ, बुनियादी परिदृश्यों के लिए गति और कार्यक्षमता में अंतर न्यूनतम है।
yarn workspaces — एक रिपॉजिटरी में कई पैकेजों के प्रबंधन के लिए तंत्र। रूट package.json में फ़ील्ड "workspaces": ["packages/*"] होता है। yarn install शीर्ष स्तर पर एकल node_modules में साझा निर्भरताएँ स्थापित करता है, स्थानीय पैकेजों के बीच सिमलिंक बनाता है और डुप्लिकेशन से बचाता है। सभी workspaces के लिए कमांड yarn workspaces run <script> के माध्यम से चलाए जाते हैं।
Plug'n'Play (PnP) — पारंपरिक node_modules फ़ोल्डर का विकल्प, जो yarn 2 में प्रस्तुत किया गया। फ़ाइलों को कॉपी करने के बजाय, yarn .pnp.cjs में निर्भरता मानचित्र बनाता है और पैकेजों को वैश्विक कैश में ZIP आर्काइव में संग्रहीत करता है। PnP लाभ: सेकंडों में स्थापना, Node.js स्टार्टअप समय 30-50% कम, कोई node_modules और संबंधित पथ समस्याएँ नहीं।
yarn को वैश्विक रूप से स्थापित करें: npm install -g yarn। प्रोजेक्ट रूट में, yarn import चलाएँ — yarn package-lock.json पढ़ता है और समतुल्य yarn.lock बनाता है। node_modules और package-lock.json हटाएँ, सत्यापन के लिए yarn install चलाएँ। npm को yarn से बदलकर CI/CD कॉन्फ़िगरेशन अपडेट करें। yarn package.json के साथ पूरी तरह से संगत है।
"Integrity check failed" त्रुटि तब होती है जब yarn.lock और node_modules सिंक से बाहर होते हैं। समाधान: node_modules, yarn.lock हटाएँ और कैश साफ़ करें (yarn cache clean), फिर yarn install दोबारा चलाएँ। संस्करण विरोध के लिए, विशिष्ट अपडेट चुनने के लिए yarn upgrade-interactive का उपयोग करें। yarn dedupe डुप्लिकेट पैकेज हटाएगा।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें