Wybierz region
pl
  • PL
  • EN
Wydrukuj

Jak dzielić się swoim kodem z zespołem przy użyciu npm i Nexus?

To, co pozwala utrzymać wysokie tempo rozwoju projektu, to między innymi sprawne wykorzystanie komponentów już wytworzonych w celu uniknięcie powtarzalnej pracy.

Wykorzystanie bibliotek współdzielonych wewnątrz zespołu lub całej organizacji pozwala na przyspieszenie pracy oraz uniknięcie powtarzalnych błędów.

Kiedy na to czas?

Rzecz jasna przygotowując MVP swojego produktu, korzystanie z takich narzędzi jest najczęściej zbędne. Natomiast z naszego doświadczenia szybko może się to zmienić. Powodów, dla których możemy chcieć udostępnić bibliotekę może być wiele:

Pracując nad projektem stworzyliśmy przydatne komponenty, które mogą przysłużyć sięprzysłużyćsię również innym,

W obrębie jednego projektu często zdarza nam się pisać powtarzalny kod,

Tworzone przez nas rozwiązania zakłada integrację z zewnątrz –możemy udostępnić bibliotekę kliencką do stworzonego interfejsu API.

Wykorzystujemy architekturę mikro-serwisową i wiele serwisów korzysta ze wspólnego mechanizmu (np. uwierzytelnienia).

Na czym to polega?

Pierwsze co można uznać za dzielenie się kodem to po prostu zamieszczanie swoich projektów w repozytorium. Nie rozwiązuje to jednak podstawowego problemu – kopiowania kodu. Dzisiaj skupimy się na czymś innym – na utworzeniu biblioteki dostępnej z poziomu managera pakietów dostępnego w danej technologii.

Nie jestem w stanie pokryć wszystkich dostępnych managerów pakietów, ale narzędzie, które Wam pokażę, wspiera między innymi: Maven (Java), npm (Node.JS), PyPi (Python), NuGet (.Net), RubyGems (Ruby), a więc zaspokoi potrzeby większości z Was. W tym artykule opiszę jak publikować pakiety dedykowane dla Node.JS, a w podsumowaniu zamieszczę linki do tutoriali dla innych platform.

Manager pakietów

Wymieniłem wcześniej kilka dostępnych managerów pakietów, ale czym one w ogóle są?

Jest to po prostu narzędzie pozwalające na instalację oraz późniejszą aktualizację i  zarządzanie pakietami i bibliotekami. Manager pakietów pobiera dany pakiet z internetu oraz instaluje go w odpowiedniej wersji.

Przykładowo poniższa komenda zainstaluje w obecnym projekcie bibliotekę Axios.

npm install axios --save

Nexus

Jednym z rozwiązań pozwalającym nam na udostępnianie bibliotek wewnątrz firmy jest Nexus (https://www.sonatype.com/nexus/repository-oss). Jest to darmowe repozytorium pakietów posiadające wsparcie dla największych managerów pakietów dostępnych na rynku. 

Pierwszym krokiem w pracy z Nexus’em jest oczywiście jego instalacja zgodnie z instrukcją (https://help.sonatype.com/repomanager3/installation).

Kolejny krok to utworzenie wszystkich wymaganych repozytoriów, a jest ich kilka. Tym najbardziej istotnym z punktu widzenia naszego celu jest npm-hosted – to ono jest odpowiedzialne za przechowywanie naszych prywatnych bibliotek. Natomiast tutaj trafiamy na pewne ograniczenie npm’a – pozwala on na zdefiniowanie tylko jednego adresu URL, pod którym znajdują się wszystkie pakiety (domyślnie jest to adres https://registry.npmjs.org/). Z tego powodu konieczne są jeszcze 2 repozytoria: npm-proxy, które przekazuje ruch do domyślnego rejestru npm oraz npm-group, które grupuje oba repozytoria.

 

Źródło: Materiał własny autora.

W celu utworzenia repozytorium npm-hosted należy wybrać: 

⚙ > Repositories > Create repository > npm (hosted). 

Pole Deployment policy określa czy możliwe jest nadpisanie pakietu o danej wersji. Jeśli chcecie, aby wasz proces CICD każdorazowo nadpisywał również wersję z tagiem latest, należy wybrać tą opcję.

Pozostałe parametry konfiguracyjne mogą pozostać jako domyślne.

Źródlło: Nexus.

W celu utworzenia repozytorium npm-hosted należy wybrać: 

⚙ > Repositories > Create repository > npm (proxy). 

Tym razem poza nazwą musimy również podać adres repozytorium, które jest repozytorium, do którego dostęp jest przekierowywany. W przypadku domyślnego rejestru npm jest to adres: https://registry.npmjs.org/.

Źródlło: Nexus.

W celu utworzenia repozytorium npm-hosted należy wybrać: 

⚙ > Repositories > Create repository > npm (group)

W sekcji Member Repositories należy wybrać 2 uprzednio utworzone repozytoria (przenosząc je na prawą stronę).

Po wykonaniu tych czynności, wszystkie 3 utworzone repozytoria powinny być widoczne na liście. Przycisk copy pozwala na skopiowanie adresu repozytorium.

Publikowanie bibliotek

Skoro mamy już utworzone repozytoria to pora umieścić tam wreszcie jakieś pakiety. W tym celu należy dodać poniższą linijkę do pliku package.json. Zauważ, że podany adres jest adresem repozytorium npm-hosted.

{

...

"publishConfig": "http://nexus.viviclabs.com/repository/test-npm-hosted/"

}

Po konfiguracji wystarczy użyć komendy npm publish w celu opublikowania aktualnej wersji projektu.

Instalowanie bibliotek

Aby móc zainstalować pakiet z naszego prywatnego repozytorium, należy zmienić adres rejestru w konfiguracji danego projektu. Robi się to poprzez utworzenie pliku .npmrc w głównym katalogu projektu (obok package.json).

W pliku należy umieścić 2 linijki:

registry: adres URL repozytorium npm-group (dostęp zarówno do repozytorium prywatnego i głównego npm),

_auth: hash danych logowania zakodowany w base64.

registry=http://nexus.viviclabs.com/repository/test-npm-group/

_auth=YWRtaW46cGFzc3dvcmQxMjM=

W celu uzyskania parametru _auth można wykorzystać poniższą komendę w systemie Linux:

echo -n 'admin:password123' | openssl base64

Podsumowanie

Udostępnienie wewnętrznych bibliotek w organizacji jest proste do wykonania, a może znacząco usprawnić proces rozwoju produktu. Nexus jest świetnym darmowym narzędziem, które doskonale sprawdzi się w prawie każdej technologii. 

 

 

 

 


Damian Warzecha

Nowinki IT nie mają przed nim tajemnic. Pasjonat AI, członek zespołu Vivic Labs, laureat Hackathon by Asseco, edycja 1, 2018 rok.


Wydrukuj