با محدود شدن دسترسی به اینترنت در ایران، یکی از بزرگترین چالشها برای توسعهدهندگان، نصب و مدیریت پکیجها تو پروژههای Node.js شده. کاری که قبلاً با یه npm install چند ثانیه طول میکشید، الان ممکنه با خطا، زمان طولانی نصب یا Timeout روبهرو بشه.
پس چطور زنده بمونیم؟
اولین قدم ساده و سریع، استفاده از mirror به جای registry اصلی npm هست:
npm config set registry https://registry.npmmirror.com
یا فقط برای یک نصب خاص:
npm install --registry=https://registry.npmmirror.com
تو خیلی از مواقع، همین تغییر کوچک کافی هست تا دوباره کارمون راه بیفته.
اگه پروژهت Dockerized باشه، خیلی از مشکلات از قبل حل شدن:
استفاده از Docker Hub mirror
ساخت imageهایی که dependencyها از قبل داخلش نصب شده
بیلد گرفتن در CI/CD خارج از ایران و فقط pull کردن image نهایی
تو این حالت، Docker دیگه فقط یه ابزار نیست، یه استراتژی بقاست.
Cache یکی از مهمترین ابزارهاست. به زبون ساده، cache یعنی ذخیرهسازی محلی پکیجها و artifactها تا دفعه بعد نیازی به دانلود دوباره نباشه.
چند نوع cache مهم داریم:
Npm Cache: با دستور --prefer-offline میتونیم حتی بدون اینترنت پکیجها رو نصب کنیم:
npm install --prefer-offline
Yarn Cache: مثل npm، پکیجها رو تو حافظه محلی نگه میداره و سرعت نصب رو بالا میبره.
Pnpm Store: پکیجها رو به صورت اشتراکی ذخیره میکنه و چند پروژه میتونن ازش استفاده کنن.
Cache در Nexus یا Repository Managerهای دیگه: پکیجها یه بار دانلود میشن و کل تیم بدون اینترنت بهشون دسترسی داره.
برای تیمها و پروژههای سازمانی، بهترین کار راهاندازی یه registry داخلی هست:
Verdaccio
Nexus
Artifactory
این روش وابستگی مستقیم به اینترنت خارجی رو حذف میکنه و مدیریت پکیجها رو سادهتر و قابل پیشبینیتر میکنه.
Nexus یه repository manager حرفهایه که مخصوص تیمها و شرکتهای بزرگ طراحی شده تا کنترل کامل روی پکیجها و وابستگیها داشته باشن.
چند قابلیت مهم Nexus:
نگهداری انواع پکیجها:
Java: Maven, Gradle
Node.js: npm
Python: PyPI
Docker: Docker images
و حتی Ruby، NuGet و غیره
Mirror و Cache: پکیجها یه بار دانلود میشن و دفعه بعد از Nexus داخلی میاد، بدون نیاز به اینترنت خارجی.
امنیت و کنترل دسترسی: میتونی مشخص کنی چه کسی به چه پکیجی دسترسی داشته باشه و قبل از استفاده، نسخهها بررسی بشن.
برای Node.js کافیه registry داخلی رو تنظیم کنیم:
npm set registry http://nexus.local:8081/repository/npm-proxy/ npm install
حتی میتونیم پکیجهای داخلی خودمون رو تو Nexus منتشر کنیم و همه تیم ازش استفاده کنه.
به طور خلاصه، Nexus یه راهکار حرفهایه که کار مدیریت dependencyها و artifactها رو ساده، امن و قابل پیشبینی میکنه، مخصوصاً وقتی اینترنت خارجی دسترسی نداریم.
با ترکیب چند روش ساده، میتونیم جریان توسعه رو حتی تو شرایط محدودیت اینترنت ادامه بدیم:
mirrorهای جایگزین
Docker
cacheهای محلی و مرکزی
registry داخلی
با این استراتژیها، پروژهها میتونن بدون وقفه و با اطمینان پیش برن.