طریقه استفاده از nexus برای مدیریت dependency ها در پروژه های Npm

نصب nexus 3برای نصب nexus می توانید از صفحه دانلود این سایت فایل مربوط به سیستم عامل خودتان را دانلود نموده و پس از استخراج فایل ها در پوشه bin دستور زیر را اجرا نمایید ../nexus.exe /runاین برنامه به صورت پیش فرض در پورت 8081 اجرا می شود و همچنین برای لاگین از admin/admin123 می توان استفاده نمود. در مسیر زیر می توان nexus را دید.http://localhost:8081 به چند دلیل nexus می تواند به ما در مدیریت dependency ها کمک کند یک به این دلیل که ممکن است npm install اغلب وقت زیادی را ببرد و دلیل دیگر اینکه ما در شرکتی باشیم که چندین پروژه و تعداد افراد زیادی داریم که بخواهند بر روی این پروژه ها کار کنند و در آن موقع لزوم یک Repository manager بسیار حیاتی است در غیر اینصورت ما با چالش های متعددی روبرو می شویم. در این پست ما طریقه ساخت یک npm repository را به شما آموزش می دهیم. تنظیمات nexus برای npm repository ساخت یک (private repository (hosted برای مدیریت پکیج های خودمانساخت یک proxy repository برای ارتباط با رجیستری رسمی npmساخت یک group repository برای ترکیب موارد بالا و دسترسی به آنها در یک مسیر یا urlتوصیه می شود برای هریک از این repositroy ها یک blob store جداگانه ساخته شود. اما برای ادامه کار ضرورتی ندارد.ساخت Private Repository این Repository برای پکیج های npm ایی می باشد که تیم برنامه نویس در ان پکیج های توسعه داده شده را قرار می دهند. پس از لاگین بر روی دکمه تنظیمات کلیک نموده و به مسیر زیر برای ساخت یک npm (hosted) repository رفته و مانند شکل زیر آن را کانفیگ می نماییم. Private Repositoryساخت Proxy Repository این Repository برای این می باشد که پروکسی به رجیستری رسمی npm بزند و هرچیزی که شما بخواهید را دانلود کند. در زمانی دیگر که همان dependency را بخواهید دانلود کنید از کش nexus به شما آن را می دهد. برای ساخت یک npm (proxy) repository به مسیر زیر رفته و مانند شکل زیر آن را کانفیگ می نماییم. Proxy repositoryProxy Repositoryساخت Group Repository این repository جمع repository های موارد فوق می باشد و مسیر یا url واحدی را برای کانفیگ کلاینت ها برای دانلود پکیج ها مهیا می کند. برای ساخت یک npm (group) repository به مسیر زیر رفته و مانند شکل زیر آن را کانفیگ می نماییم. Group Repositoryنحوه ی کانفیگ کلاینت ها و پروژه ها برای استفاده از Nexus Repositorys اگر شما فقط پروژه ای دارید که فقط قرار است dependency ها را دانلود کند فقط کافیست فایل npmrc. را در مسیر پروژه داشته یا اینکه برای تمام پروژه ها درمسیر اصلی فولدر یوزر خودتان فایل npmrc. را بسازید. برای ساخت فایل npmrc. به صورت کلی در مسیر یوزر می توانید از دستور زیر استفاده نمایید.npm config set registry http://your-host:8081/repository/npm-group/و برای اینکه پروژه ای را بخواهید publish کنید میبایست یا فایل npmrc. را در پروژه خود با تنظیم رجیستری در داخل ان قرار دهید یا کانفیگ زیر را به package.json اضافه نمایید. Package.json : { ... "publishConfig": {"registry": "http://your-host:8081/repository/npm-private/"} }برای اینکه بتوانید پکیج ها را از nexus دانلود کنید در بخش تنظیمات nexus در بخش Realm حتما npm Bearer Token Realm را فعال نمایید.در نهایت برای دریافت dependency ها از دستور npm install و برای قرار دادن پروژه خود در nexus از npm publish استفاده نمایید. به دلایلی مانند ساختار شرکت ممکن است سرور nexus در شرکت خارج از شبکه اینترنت باشد و فقط از شبکه داخل قابلیت دسترسی را دارا باشد به همین دلیل می بایست در شرکت سیستمی دیگر نقش رجیستری nexus در شرکت را به عهده داشته باشد، به این صورت که در این سیستم nexus دیگری قرار می گیرد و برای دریافت dependency ها از اینترنت استفاده می شود و پس از دریافت dependency ها و کش شدن از طریق nexus در این سیستم آن را به شبکه داخلی متصل نموده و قبل از آن می بایست رجیستری nexus داخل شرکت را به این سیستم متصل نموده و پس از آن اگر از nexus داخلی شرکت درخواستی شود که آن dependency را نداشته باشد به این سیستم مراجعه نموده و آن را از این سیستم دانلود می کند. بنابراین تمام برنامه نویس ها به سرور nexus داخلی شرکت متصل شده و از آن فایل های مربوطه را دریافت می نمایند.برای تنظیم موردی که در بالا ذکر شد میبایست remote storage مربوط به proxy repository را در nexus داخل شرکت را با مسیر repository group سیستمی که قرار است به اینترنت متصل شود تغییر دهیم. مسیر زیر را به عنوان رجیستری nexus داخلی شرکت قرار می دهیم.net-system-ip:8081/repository/npm-groupدر net-system-ip ،ای پی سیستم متصل شونده به اینترنت را قرار می دهیم.