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-এ নির্ভরতা সংস্করণ পরীক্ষা এবং প্রয়োগ করে। Yarn Constraint Language ব্যবহার করে yarn.constraints.js ফাইলে constraints বর্ণনা করা হয়। 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন