مقدمه
در محیطهای ایزوله (Airgap) که دسترسی مستقیم به اینترنت وجود ندارد، نصب پکیجهای npm با مشکل مواجه میشود. راهحل استاندارد، تنظیم npm client برای استفاده از یک mirror یا registry داخلی است که پکیجهای مورد نیاز را در خود نگه میدارد. در این آموزش روشهای مختلف تنظیم npm برای کار با registry داخلی را مرور میکنیم.
تنظیم npm registry
سادهترین روش برای تغییر registry، استفاده از دستور npm config set registry است:
npm config set registry https://YOUR_MIRROR_URLاین دستور مقدار registry را در فایل ~/.npmrc ذخیره میکند و تمام دستورات بعدی npm از این آدرس برای دریافت پکیجها استفاده میکنند.
اگر فقط میخواهید یک پروژه خاص از mirror استفاده کند، از پرچم --location=project استفاده کنید:
npm config set registry https://YOUR_MIRROR_URL --location=projectبا این کار فایل .npmrc در ریشه همان پروژه ساخته میشود و تنظیم فقط برای همان پروژه اعمال میگردد.
تنظیم از طریق فایل .npmrc
میتوانید مستقیماً فایل .npmrc را ویرایش کنید. این فایل میتواند در سه سطح قرار گیرد:
- سطح جهانی —
~/.npmrc - سطح پروژه —
./.npmrc - سطح داخلی npm —
/etc/npmrc
محتوای فایل بسیار ساده است:
registry=https://YOUR_MIRROR_URLهر سطح اولویت بالاتری نسبت به سطح قبلی دارد؛ یعنی تنظیم سطح پروژه بر تنظیم سطح جهانی غلبه میکند.
تنظیم از طریق متغیر محیطی
روش دیگر، استفاده از متغیر محیطی npm_config_registry است. این روش برای داکر، CI/CD یا اسکریپتهای خودکار بسیار مناسب است:
export npm_config_registry=https://YOUR_MIRROR_URLبعد از export، تمام دستورات npm در آن ترمینال از mirror استفاده میکنند. متغیرهای محیطی بالاترین اولویت را دارند.
حل مشکل SSL/TLS
اگر mirror شما از پروتکل HTTP استفاده میکند یا از گواهی self-signed استفاده میکند، npm با خطای SSL مواجه میشود. دو راهحل وجود دارد:
غیرفعال کردن strict-ssl در npm
npm config set strict-ssl falseاستفاده از متغیر محیطی Node.js
export NODE_TLS_REJECT_UNAUTHORIZED=0توجه امنیتی: این تنظیمات اعتبارسنجی گواهی SSL را کاملاً غیرفعال میکنند. فقط در محیطهای ایزوله و داخلی از آنها استفاده کنید و در محیط تولیدی هرگز.
جدول سرویسهای عمومی npm Mirror در ایران
چند mirror عمومی که در دسترس کاربران ایرانی هستند:
| مالک میرور | آدرس میرور |
|---|---|
| رانفلیر | https://mirror-npm.runflare.com |
| لیارا | https://package-mirror.liara.ir/repository/npm/ |
تست تنظیمات
برای اطمینان از صحت تنظیمات، یک پکیج ساده را نصب کنید:
npm install express --verboseبا استفاده از پرچم --verbose میتوانید آدرس mirror در حال استفاده را در خروجی مشاهده کنید. اگر همه چیز درست باشد، پکیج از mirror داخلی دریافت و نصب میشود.