برو به محتوای اصلی
اسکریپت

معرفی yarnpkg

yasin

معرفی Yarn: مدیر بسته سریع و قابل اعتماد برای جاوا اسکریپت

Yarn یه ابزار مدیریت بسته (Package Manager) برای پروژه‌های جاوا اسکریپتیه که بهت کمک می‌کنه وابستگی‌های پروژه رو راحت مدیریت کنی. یعنی باهاش می‌تونی پکیج‌های مورد نیازت رو نصب، به‌روز کنی، پیکربندی کنی و حذفشون کنی بدون اینکه توی روند توسعه‌ی پروژه اذیت بشی یا وقتت تلف بشه.

Yarn چرا ساخته شده و چه مزایایی داره؟

Yarn روی چندتا موضوع مهم تمرکز داره که باعث می‌شه یه گزینه‌ی قوی و پرطرفدار برای مدیریت پکیج‌ها باشه:

  • سرعت بالا: خیلی سریع‌تر از npm کار می‌کنه، چون سیستم کش آفلاین داره و می‌تونه چندتا پکیج رو همزمان نصب کنه.
  • دقت و پایداری: وابستگی‌ها رو به‌شکل دقیق و بدون مشکل مدیریت می‌کنه تا هیچ چیزی به‌هم نریزه.
  • امنیت بیشتر: با بررسی دقیق فایل‌های نصب‌شده، احتمال دستکاری شدن یا وجود مشکلات امنیتی رو کم می‌کنه.
  • تجربه‌ی بهتر برای توسعه‌دهنده‌ها: امکاناتی مثل Workspaces، کش آفلاین، نصب همزمان، مد امنیتی قوی و دستورات تعاملی باعث شده که کار باهاش راحت‌تر و بهینه‌تر باشه.

فرق Yarn با بقیه‌ی مدیر بسته‌ها چیه؟

بیشتر مدیرهای بسته (مثل npm) بعضی از کارها رو همچنان از طریق خود npm انجام می‌دن، ولی Yarn همه چیز رو از اول خودش پیاده‌سازی کرده. این یعنی کنترل کاملی روی عملکرد و تجربه‌ی کاربریش داره و کاملاً مستقل از npm کار می‌کنه.


نصب و راه‌اندازی Yarn

بهترین روش برای نصب و مدیریت Yarn اینه که اون رو به‌صورت پروژه‌ای نصب کنی و از Corepack استفاده کنی. Corepack یه ابزاره که به‌صورت پیش‌فرض همراه Node.js نصب می‌شه و کار با Yarn رو راحت‌تر می‌کنه.

توجه کن که نسخه‌های جدید Yarn نباید به‌صورت سراسری (global) یا از طریق npm نصب بشن!

فعال‌سازی Corepack و شروع یه پروژه جدید

اگه Corepack روی سیستمت فعال نیست، اول باید فعالش کنی:

corepack enable

بعدش یه پروژه جدید رو مقداردهی اولیه کن:

yarn init -2

این دستور یه پروژه جدید با تنظیمات Yarn مدرن راه‌اندازی می‌کنه.

آپدیت Yarn به آخرین نسخه

اگه بخوای همیشه از جدیدترین نسخه پایدار Yarn استفاده کنی، کافیه اینو اجرا کنی:

yarn set version stable
yarn install

با این کار، پروژه به جدیدترین نسخه‌ی پایدار Yarn به‌روز می‌شه.

نصب نسخه‌های آزمایشی (Release Candidate)

گاهی وقتا بعضی از قابلیت‌های جدید هنوز به نسخه‌ی اصلی اضافه نشدن، ولی توی نسخه‌های آزمایشی منتشر می‌شن. اگه بخوای یه نسخه‌ی آزمایشی رو تست کنی، این دستور رو بزن:

yarn set version canary

این نسخه‌ها خیلی پایداره، فقط تغییرات جدید رو زودتر از نسخه‌ی اصلی دریافت می‌کنی.

نصب نسخه‌ی جدید از سورس اصلی (تست نسخه‌های منتشرنشده)

اگه بخوای یه نسخه از Yarn رو تست کنی که هنوز حتی توی نسخه‌ی آزمایشی هم منتشر نشده، می‌تونی مستقیم از مخزن اصلی (Repository) اون رو نصب کنی:

yarn set version from sources

اگه بخوای یه شاخه (branch) خاص رو تست کنی، مثلاً یه تغییر مشخص که روی شاخه‌ی 1211 اعمال شده، اینو بزن:

yarn set version from sources --branch 1211

نکته‌ی مهم درباره‌ی نسخه‌های منتشرنشده

برخلاف نسخه‌های پایدار و آزمایشی، این روش از Corepack استفاده نمی‌کنه و فایل اجرایی Yarn رو داخل پوشه‌ی .yarn/releases ذخیره می‌کنه و از طریق .yarnrc.yml به پروژه متصل می‌شه. یعنی این نسخه مستقیماً روی سیستم عاملت نصب نمی‌شه، بلکه فقط داخل پروژه ذخیره می‌شه.


نحوه استفاده از Yarn

اگه قبلاً با npm کار کردی، یه سری تفاوت‌های مهم توی Yarn وجود داره که باید بدونی:

  • نصب پکیج‌ها راحت‌تر شده:
    اگه می‌خوای وابستگی‌های پروژه رو نصب کنی، فقط کافیه دستور yarn رو اجرا کنی. این همون yarn install هست و نیازی به نوشتن install نداری.

دستورات مربوط به رجیستری پشت yarn npm رفته:
توی Yarn، اگه بخوای کارهایی مثل بررسی امنیت پکیج‌ها رو انجام بدی، باید از yarn npm استفاده کنی. مثلاً برای چک کردن امنیت پکیج‌ها:

yarn npm audit

اجرای اسکریپت‌ها ساده‌تر شده:
توی npm، اگه می‌خواستی یه اسکریپت رو اجرا کنی، باید این‌جوری می‌نوشتی:

npm run build

اما توی Yarn، می‌تونی مستقیماً اینو بزنی:

yarn build

یعنی دیگه نیازی به run نداری.

آپدیت همه‌ی وابستگی‌های پروژه:
اگه می‌خوای همه‌ی پکیج‌ها رو توی کل پروژه به جدیدترین نسخه‌ها آپدیت کنی، از این دستور استفاده کن:

yarn up

اضافه کردن یا به‌روزرسانی یه پکیج خاص:
اگه می‌خوای یه پکیج جدید به پروژه اضافه کنی یا نسخه‌ی یه پکیج رو به‌روز کنی، این دستور رو استفاده کن:

yarn add package-name

مهاجرت از Yarn 1.x یا npm به Yarn مدرن

چرا باید به Yarn مدرن آپدیت کنیم؟
یعنی اگه هنوز داری از Yarn 1.x استفاده می‌کنی، چرا بهتره که به نسخه‌ی جدیدترش مهاجرت کنی؟ اینجا چند دلیل مهم وجود داره:

  • پایداری بیشتر
    نسخه‌ی مدرن Yarn بعد از چند سال تجربه و رفع مشکلات نسخه‌ی قدیمی ساخته شده و خیلی پایدارتر از قبل شده. یعنی حالا کمتر با باگ‌ها و مشکلات عجیب‌وغریب روبه‌رو می‌شی.
  • ویژگی‌های جدید
    نسخه‌ی جدید Yarn قابلیت‌هایی داره که اصلاً توی نسخه‌ی 1.x یا حتی بقیه‌ی مدیرهای بسته (مثل npm) وجود نداشتن. مثلاً قابلیتی مثل Constraints فقط توی Yarn مدرن هست که باعث می‌شه وابستگی‌ها بهتر مدیریت بشن.
  • انعطاف‌پذیری بالا
    Yarn مدرن از سه روش نصب مختلف پشتیبانی می‌کنه:
    1. Plug’n’Play (PnP) – نصب بدون نیاز به node_modules
    2. روش قدیمی با node_modules
    3. سیستم کش مشابه pnpm
      یعنی هر روشی که راحت‌تری رو می‌تونی استفاده کنی.
  • قابلیت توسعه و سفارشی‌سازی
    توی Yarn مدرن، اگه یه ویژگی جدید نیاز داشته باشی، لازم نیست منتظر باشی که تیم Yarn اون رو اضافه کنه! می‌تونی خودت اون رو طبق نیازهای پروژه‌ات پیاده‌سازی کنی و استفاده کنی.
    مثلا می‌تونی سیستم نصب اختصاصی، اعتبارسنجی پروژه یا Workspaces خاص خودت رو داشته باشی.
  • آینده‌نگری و توسعه‌پذیری
    توی نسخه‌ی قدیمی Yarn (1.x)، اضافه کردن قابلیت‌های جدید خیلی سخت بود و هر تغییری ممکن بود باعث مشکلات ناگهانی بشه. اما توی Yarn مدرن، این مشکل کاملاً برطرف شده و حالا خیلی راحت‌تر می‌شه ویژگی‌های جدید اضافه کرد، بدون اینکه عملکرد کل سیستم به‌هم بریزه.

مهاجرت گام‌به‌گام به Yarn مدرن

اگه درباره‌ی Plug’n’Play نگرانی داری، لازم نیست عجله کنی

ممکنه شنیده باشی که Yarn مدرن از Plug’n’Play (PnP) استفاده می‌کنه و نگران باشی که پروژه‌ات با این روش سازگار نیست. ولی نگران نباش، چون مهاجرت به Yarn مدرن اجباری به استفاده از PnP نیست. یعنی می‌تونی همچنان از node_modules استفاده کنی و بعداً اگه خواستی، به PnP مهاجرت کنی.

دستورات مهاجرت فقط یک بار اجرا می‌شن

وقتی این تغییرات رو انجام دادی، لازم نیست اعضای تیم یکی‌یکی این مراحل رو تکرار کنن. به محض این که تغییرات رو روی مخزن پروژه (مثلاً گیت) اعمال کنی، همه‌ی اعضای تیم بعد از Pull کردن، به طور خودکار این تنظیمات رو خواهند داشت (البته اگه Corepack روی سیستمشون فعال باشه).

مراحل مهاجرت به Yarn مدرن

✅ ۱. مطمئن شو که نسخه‌ی Node.js حداقل ۱۸ باشه
✅ ۲. Corepack رو فعال کن:

corepack enable

✅ ۳. وارد پوشه‌ی پروژه‌ات شو
✅ ۴. Yarn رو به نسخه‌ی مدرن (Berry) تغییر بده:

yarn set version berry

✅ ۵. فایل‌های تنظیمات قدیمی (.npmrc و .yarnrc) رو به .yarnrc.yml تبدیل کن
✅ ۶. لاک‌فایل (yarn.lock) رو برای سازگاری با Yarn مدرن به‌روزرسانی کن:

yarn install

✅ ۷. تغییرات رو کامیت کن و پروژه رو تست کن

حالا Yarn مدرن روی پروژه‌ات نصب شده و آماده‌ی استفاده‌ست! البته شاید نیاز باشه یه سری تنظیمات رو توی اسکریپت‌های CI یا پیکربندی پروژه اصلاح کنی، مثل تغییر --frozen-lockfile به --immutable.

تغییرات مهم و ناسازگاری‌ها

۱. فرمت فایل‌های تنظیمات تغییر کرده

  • توی Yarn مدرن، دیگه فایل‌های .npmrc و .yarnrc خونده نمی‌شن.
  • به‌جاش باید از .yarnrc.yml استفاده کنی.
  • تنظیمات رجیستری و توکن‌های احراز هویت هم به فرمت جدید تبدیل شدن:
    • npmRegistryServer برای مشخص کردن رجیستری
    • npmAuthToken برای احراز هویت

۲. تغییر در اسکریپت‌های pre و post

توی Yarn مدرن، روش اجرای بعضی اسکریپت‌های pre و post تغییر کرده.
مثلاً توی Yarn 1.x این‌جوری بود:

{
  "scripts": {
    "prestart": "do-something",
    "start": "http-server"
  }
}

ولی توی Yarn مدرن باید این‌جوری بنویسی:

{
  "scripts": {
    "prestart": "do-something",
    "start": "yarn prestart && http-server"
  }
}

البته این تغییر فقط روی اسکریپت‌های کاربر مثل start تأثیر داره. اسکریپت‌هایی مثل preinstall، install و postinstall همچنان بدون تغییر کار می‌کنن.

۳. yarn global حذف شده! به‌جاش از yarn dlx استفاده کن

Yarn تمرکزش روی مدیریت پکیج‌های پروژه‌ایه، نه سیستم‌عامل.
به همین خاطر yarn global حذف شده و حالا باید از yarn dlx برای اجرای اسکریپت‌های موقتی استفاده کنی.

قبل:

yarn global add create-react-app
create-react-app my-app

بعد:

yarn dlx create-react-app my-app

۴. bundleDependencies دیگه پشتیبانی نمی‌شه

ویژگی bundleDependencies که اجازه می‌داد یه سری پکیج‌ها مستقیماً داخل آرشیو بسته ذخیره بشن، حذف شده.
چرا؟ چون این ویژگی باعث می‌شد مشکلاتی مثل:

  • وابستگی به node_modules (که توی PnP وجود نداره)
  • مشکلات همپوشانی وابستگی‌ها

راه‌حل‌های جایگزین:

  • اگه می‌خوای یه پکیج رو تغییر بدی، بهتره اون رو fork کنی یا با file: بهش ارجاع بدی.
  • اگه می‌خوای یه پکیج بدون وابستگی برای مشتری‌ها منتشر کنی، از Webpack، Rollup، یا Esbuild استفاده کن.

۵. حذف nohoist و جایگزینی با nmHoistingLimits

  • nohoist که مخصوص پروژه‌های React Native بود، مشکلات زیادی ایجاد می‌کرد، چون مشخص نبود دقیقاً کدوم وابستگی‌ها باید مستثنا بشن.
  • حالا این ویژگی با nmHoistingLimits جایگزین شده که تنها سه الگوی استاندارد داره و خیلی راحت‌تر کار می‌کنه.
  • اگه قبلاً از nohoist استفاده می‌کردی، حالا باید این تنظیم رو توی .yarnrc.yml اضافه کنی:
nmHoistingLimits: workspaces

تغییرات در دستورات CLI

۱. بعضی دستورات تغییر نام دادن

Yarn 1.x Yarn مدرن
yarn audit yarn npm audit
yarn create yarn dlx create-NAME
yarn global yarn dlx
yarn info yarn npm info
yarn list yarn info -AR
yarn login yarn npm login
yarn logout yarn npm logout
yarn outdated yarn upgrade-interactive
yarn publish yarn npm publish
yarn upgrade yarn up
yarn install --production yarn workspaces focus --all --production

۲. بعضی دستورات حذف شدن

دستور قدیمی جایگزین
yarn check بررسی صحت کش خودکار انجام می‌شه
yarn import باید اول به Classic ایمپورت کنی، بعد به Yarn مدرن مهاجرت کنی
yarn licenses پیشنهاد شده که از پلاگین‌های اختصاصی استفاده کنی
yarn versions از yarn --version و node -p process.versions استفاده کن

۳. بعضی قابلیت‌ها هنوز پیاده‌سازی نشدن

  • yarn owner در آینده با yarn npm owner جایگزین می‌شه.
  • yarn team هم به yarn npm team منتقل خواهد شد.

Yarn Plug'n'Play (PnP): حذف node_modules و بهینه‌سازی نصب پکیج‌ها

این بخش اختیاریه!

اگه تازه می‌خوای یه پروژه جدید راه بندازی، پیشنهاد می‌شه از Plug'n'Play (PnP) استفاده کنی. ولی اگه یه پروژه قدیمی داری، نیازی نیست عجله کنی. می‌تونی این بخش رو فعلاً رد کنی و هر وقت وقت داشتی یا نیازش حس شد، سراغش بیای.

بررسی مشکلات احتمالی با Doctor

Plug'n'Play یه سری قوانین سخت‌گیرانه برای مدیریت وابستگی‌ها داره. اگه توی پروژه‌ات وابستگی‌هایی داشته باشی که درست تعریف نشده باشن، ممکنه موقع اجرا با خطا مواجه بشی.

برای این که سریع بفهمی کجا مشکل داری، یه ابزار به اسم Doctor توی Yarn هست. کافیه این دستور رو اجرا کنی تا فایل‌های پروژه رو بررسی کنه:

yarn dlx @yarnpkg/doctor

مثلاً توی یه پروژه که webpack-dev-server داره، Doctor ممکنه این خطاها رو پیدا کنه:

➤ وابستگی @jest/test-sequencer به درستی تعریف نشده
➤ فایل webpack.config.js نباید مستقیماً از `node_modules` استفاده کنه، باید از `require.resolve` استفاده بشه
➤ فایل تست contentBase-option.test.js به پوشه `node_modules` وابسته‌ست که توی PnP وجود نداره

نتیجه: این ابزار کمکت می‌کنه تا سریع بفهمی کجاها مشکل وجود داره و قبل از این که پروژه به مشکل بخوره، اون‌ها رو برطرف کنی.

فعال کردن PnP توی پروژه

۱️⃣ فایل .yarnrc.yml رو باز کن و مقدار nodeLinker رو چک کن.
۲️⃣ اگه مقدارش pnp باشه، یعنی قبلاً فعال شده و نیازی به تغییر نداری.
۳️⃣ اگه نبود، مقدار nodeLinker رو به pnp تغییر بده و بعد این دستور رو اجرا کن:

yarn install

۴️⃣ تغییرات رو کامیت کن. حالا پروژه‌ات با Plug'n'Play کار می‌کنه!

نکات مهم بعد از فعال کردن PnP

  • دیگه node_modules وجود نداره!
    باید به جای اون، از require.resolve برای دسترسی به ماژول‌ها استفاده کنی.

اسکریپت‌های prestart دیگه به‌صورت خودکار اجرا نمی‌شن، باید به‌صورت دستی صداشون بزنی:

yarn prestart

اگه توی اسکریپت‌های پروژه مستقیماً node رو صدا می‌زدی، حالا باید از yarn node استفاده کنی:

yarn node script.js

پوشه‌ی .bin هم حذف شده!
اگه به ابزارهایی که داخل node_modules/.bin بودن نیاز داری، باید از yarn run bin استفاده کنی.

yarn run jest

یا کوتاه‌تر:

yarn jest

تنظیمات IDE برای پشتیبانی از PnP

اکثر ویرایشگرهای کد مثل VSCode پیش‌فرض از PnP پشتیبانی نمی‌کنن، ولی می‌تونی به‌راحتی تنظیمشون کنی:

۱️⃣ افزونه‌ی ZipFS رو برای VSCode نصب کن.
۲️⃣ دستور زیر رو اجرا کن تا تنظیمات لازم برای IDE ذخیره بشه:

yarn dlx @yarnpkg/sdks vscode

۳️⃣ اگه با TypeScript کار می‌کنی، توی VSCode گزینه‌ی "Use Workspace Version" رو فعال کن تا از نسخه‌ی درست TypeScript استفاده بشه.

مشکلات رایج و راه‌حل‌ها

۱. خطای Cannot find module [...]

اگه بعد از فعال کردن PnP دیدی که بعضی پکیج‌ها پیدا نمی‌شن، ممکنه مشکل از این باشه که Yarn به درستی توی محیط Node.js ست نشده.

🔹 راه‌حل:
به‌جای این که مستقیماً node رو اجرا کنی، این‌جوری صداش بزن:

yarn node script.js

۲. یه پکیج می‌خواد به یه ماژول دسترسی داشته باشه که داخل وابستگی‌هاش نیست

بعضی پکیج‌ها یادشون می‌ره که همه‌ی وابستگی‌هاشون رو توی package.json تعریف کنن. توی PnP، این وابستگی‌ها به‌صورت سخت‌گیرانه بررسی می‌شن و اگه یه پکیج یه وابستگی نداشته باشه، Yarn جلوی اجراش رو می‌گیره.

🔹 راه‌حل کوتاه‌مدت:
توی فایل .yarnrc.yml، از packageExtensions برای اضافه کردن اون وابستگی استفاده کن.

مثلاً اگه React وابستگیش به prop-types رو اعلام نکرده، اینو اضافه کن:

packageExtensions:
  "react@*":
    dependencies:
      prop-types: "*"

و بعد yarn install رو اجرا کن.

🔹 راه‌حل بلندمدت:
یه Pull Request توی مخزن اون پکیج بفرست تا توسعه‌دهنده‌ی اصلی وابستگی رو به package.json اضافه کنه.


نکات مهم درباره‌ی Corepack و مدیریت نسخه‌ی Yarn

چرا نباید Yarn رو با npm install -g yarn نصب کنیم؟

شاید متوجه شده باشی که توی راهنمای نصب Yarn هیچ جا گفته نشده که اون رو به‌صورت سراسری (-g) با npm نصب کنی. حتی پیشنهاد شده که این کار رو انجام ندی!

اما چرا؟
وقتی Yarn رو به‌صورت سراسری نصب می‌کنی، همیشه جدیدترین نسخه‌ی منتشر شده رو اجرا می‌کنی. این معمولاً مشکلی نداره، ولی گاهی یه بروزرسانی باعث می‌شه پروژه‌ات به مشکل بخوره، مثلاً:

  • یه تغییر ناگهانی باعث بشه بعضی وابستگی‌ها درست کار نکنن.
  • یه باگ جدید توی نسخه‌ی آخر اضافه بشه.
  • یه تغییر ناسازگار (breaking change) کل سیستم رو بهم بریزه.

چطور این مشکل رو حل کنیم؟
برای این که Yarn نسخه‌ی درستی داشته باشه و با پروژه‌ات هماهنگ باشه، Node.js و Yarn با هم Corepack رو توسعه دادن. Corepack ابزاریه که بهت اجازه می‌ده مدیریت بسته‌ی مناسب رو برای هر پروژه مشخص کنی، دقیقاً مثل قفل کردن نسخه‌های وابستگی‌ها در package.json.

Corepack چیست و چطور Yarn رو مدیریت می‌کنه؟

Corepack یه ابزار رسمی توی Node.js هست که به جای نصب Yarn به‌صورت سراسری، اجازه می‌ده هر پروژه از نسخه‌ی خاص خودش استفاده کنه. این یعنی پروژه‌ی A می‌تونه از Yarn 3.2 استفاده کنه، در حالی که پروژه‌ی B همچنان روی Yarn 2.1 بمونه، بدون این که این دو نسخه روی هم تأثیر بذارن.

Corepack برای چه ابزارهایی کار می‌کنه؟

  • Yarn
  • pnpm

📌 یادت باشه: Corepack هنوز به‌صورت آزمایشی (experimental) هست، ولی الان بهترین روش برای مدیریت Yarn و pnpm محسوب می‌شه.

نصب و فعال‌سازی Corepack

Corepack از نسخه‌ی ۱۴.۱۹ و ۱۶.۹ به بعد به‌صورت پیش‌فرض همراه Node.js نصب می‌شه، ولی تا وقتی که دستی فعالش نکنی، کار نمی‌کنه.

۱. فعال کردن Corepack

corepack enable

بعد از این کار، Yarn به‌صورت خودکار بر اساس نسخه‌ی مشخص‌شده در پروژه اجرا می‌شه.

۲. چک کن که Corepack فعال شده یا نه

برای اینکه مطمئن بشی Corepack درست نصب شده، این دستور رو اجرا کن:

yarn exec env

اگه مسیر (path) نمایش داده شد، یعنی Corepack درسته و مشکلی نداری. ولی اگه اجرا نشد، شاید یه مشکلی توی نصب وجود داشته باشه.

مشکلات احتمالی و راه‌حل‌ها

۱. Corepack توی بعضی از توزیع‌های Node.js وجود نداره

بعضی از مدیریت‌های پکیج لینوکس یا توزیع‌های شخص‌ثالث Node.js، Corepack رو به‌صورت پیش‌فرض ندارن.

🔹 راه‌حل:
اگه دستور corepack enable کار نکرد، اول Corepack رو با npm نصب کن:

npm install -g corepack

و بعد دوباره Corepack رو فعال کن:

corepack enable

۲. کار نکردن Corepack توی شبکه‌های بسته و CIها

اگه داری روی یک شبکه‌ی بسته (مثل شرکت‌هایی که دسترسی به اینترنت محدود دارن) کار می‌کنی، ممکنه Corepack نتونه فایل اجرایی Yarn رو برای پروژه دانلود کنه.

🔹 راه‌حل:
مستندات Corepack یه بخش مخصوص برای حل این مشکل داره که بهت یاد می‌ده چطور نسخه‌ی درست Yarn رو روی شبکه‌های بسته مدیریت کنی.

۳. مشکل Corepack با Volta

Volta یه ابزار مدیریت نسخه‌ی Node.js و پکیج‌هاست که بعضی از تیم‌های توسعه ازش استفاده می‌کنن. مشکل اینجاست که Volta و Corepack به‌صورت همزمان کار نمی‌کنن، چون هر دو روی shims تأثیر می‌ذارن.

🔹 راه‌حل:
اگه از Volta استفاده می‌کنی، این دو تا دستور رو اجرا کن تا Corepack درست کار کنه:

npm install -g corepack
corepack enable --install-directory ~/.volta/bin

با این کار، Corepack روی مسیر نصب Volta تنظیم می‌شه و درست اجرا می‌شه.


تنظیمات SDK برای ویرایشگرها در Yarn PnP

چرا برای ویرایشگرها به تنظیمات خاص نیاز داریم؟

وقتی از Yarn Plug’n’Play (PnP) استفاده می‌کنی، به جای node_modules، یه لودر مخصوص برای Node.js تولید می‌شه. اما بعضی از ویرایشگرهای کد (مثل VSCode یا IntelliJ) نمی‌تونن به‌صورت خودکار این لودر رو تشخیص بدن.

مشکلاتی که ممکنه پیش بیاد:

  • بعضی افزونه‌های ویرایشگر (مثل Prettier، TypeScript و ESLint) درست کار نمی‌کنن.
  • ویرایشگر ممکنه خطا بده که ماژول‌ها پیدا نمی‌شن، چون دنبال node_modules می‌گرده.

راه‌حل چیه؟
Yarn یه سری SDK مخصوص ویرایشگرها ارائه می‌ده که این مشکل رو حل می‌کنن. این SDKها یه لایه‌ی میانی اضافه می‌کنن که درخواست‌های ویرایشگر رو به مسیرهای درست هدایت می‌کنه.

چطور SDK و تنظیمات ویرایشگر رو فعال کنیم؟

برای این کار، از دستور yarn dlx @yarnpkg/sdks استفاده می‌کنیم.

✅ برای نصب SDK پایه + تنظیمات ویرایشگرهای مختلف (مثل VSCode، Vim و ...):

yarn dlx @yarnpkg/sdks vscode vim ...

✅ اگه فقط SDK پایه رو می‌خوای (بدون تنظیمات ویرایشگر):

yarn dlx @yarnpkg/sdks base

✅ اگه قبلاً SDK نصب کردی و فقط می‌خوای همه چیزو آپدیت کنی:

yarn dlx @yarnpkg/sdks

ابزارهایی که فعلاً پشتیبانی می‌شن

هنگام اجرای yarn dlx @yarnpkg/sdks، این دستور بر اساس package.json تشخیص می‌ده که چه SDKهایی نیاز داری و فقط همونا رو نصب می‌کنه.

افزونه‌ی ویرایشگر فعال می‌شه اگه این وابستگی رو تو package.json داشته باشی
پشتیبانی از TypeScript توی VSCode typescript
افزونه Astro برای VSCode astro
افزونه‌ی ESLint برای VSCode eslint
افزونه‌ی Prettier برای VSCode prettier
افزونه‌ی Relay relay

اگه پشتیبانی بیشتری می‌خوای، می‌تونی خودت به این پروژه کمک کنی!

تنظیمات ویرایشگرها

📌 تنظیم Yarn PnP برای VSCode

1️⃣ افزونه‌ی ZipFS رو نصب کن (این افزونه توسط تیم Yarn ارائه شده).
2️⃣ این دستور رو اجرا کن تا تنظیمات لازم برای VSCode ساخته بشه:

yarn dlx @yarnpkg/sdks vscode

3️⃣ توی VSCode، وارد یه فایل TypeScript شو، دکمه‌های Ctrl + Shift + P رو بزن و گزینه‌ی "Select TypeScript Version" رو انتخاب کن.
4️⃣ بعدش گزینه‌ی "Use Workspace Version" رو انتخاب کن.

حالا VSCode دقیقاً همون نسخه‌ی TypeScript رو که توی پروژه استفاده می‌کنی، تشخیص می‌ده و مشکلی نخواهی داشت.

📌 تنظیم Yarn PnP برای Vim و Neovim

1️⃣ افزونه‌ی vim-rzip رو نصب کن.
2️⃣ این دستور رو اجرا کن تا تنظیمات لازم ساخته بشه:

yarn dlx @yarnpkg/sdks vim

3️⃣ برای Neovim، SDKهای TypeScript رو نصب کن:

yarn dlx @yarnpkg/sdks base

حالا پشتیبانی از TypeScript توی Neovim فعال شده و با nvim-lspconfig کار می‌کنه.

📌 تنظیم Yarn PnP برای Emacs

1️⃣ دستور زیر رو اجرا کن تا SDKهای لازم نصب بشن:

yarn dlx @yarnpkg/sdks base

2️⃣ یه فایل جدید .dir-locals.el بساز و این کد رو توش قرار بده تا Flycheck و LSP فعال بشه:

((typescript-mode
  . ((eval . (let ((project-directory (car (dir-locals-find-file default-directory))))
                (setq lsp-clients-typescript-server-args `("--tsserver-path" ,(concat project-directory ".yarn/sdks/typescript/bin/tsserver") "--stdio")))))))

3️⃣ Emacs رو ری‌استارت کن تا تغییرات اعمال بشن.