Z czym kojarzy nam się NPM? Zwykle jedynie z poleceniem npm install
, wpisywanym w konsolę przy starcie jakiegokolwiek projektu w Node.js lub jednym z frameworków wspominanych w tym poście. Wpisujemy polecenie, klikamy…
Instalujemy…
I po pewnym czasie na dysku mamy folder o nazwie node modules
. I tylko wtedy jesteśmy w stanie tworzyć nasz projekt, inaczej sypie błędami. Duży folder.
Być może wiecie o istnieniu innych menadżerów pakietów, takich jak Gulp czy Yarn. Być może z nich korzystacie. Chociaż NPM trzyma rywali w tyle, co pokazują statystyki na StackShare. Sama mam zamiar przestawić się na Yarna w najbliższej przyszłości (i jeśli czas pozwoli) – wystarczy zerknąć na stosunek [fa class=”fa-star”] na Githubie do pytań z tagami na Stack Overflow i od razu widać, który jest bardziej kochany.
Dzisiaj chciałabym wskazać wam kilka aspektów funkcjonowania NPM, o których być może nie zdawaliście sobie sprawy, że tak się da, albo po prostu nie widzieliście potrzeby wyjścia poza podstawową obsługę tego narzędzia. A zatem:
Czy wiesz, że…
Istnieje więcej niż jeden rejestr NPM?
Gdy wpisujemy w terminal npm install boostrap
, pakiet zostaje zaciągnięty z oficjalnego rejestru NPM: registry.npmjs.org. To on jest ustawiony jako domyślny. Oprócz tego istnieją inne rejestry, z reguły prywatne repozytoria pakietów prywatnych firm. Jeśli posiada się własny serwer www, można taki rejestr stworzyć samemu, dla swoich prywatnych pakietów. Instrukcja o tutaj.
Można ustawić globalnie rejestr inny niż npmjs. Służy do tego plik konfiguracyjny .npmrc
umieszczany w katalogu domowym. Samą zmianę wykonujemy poleceniem
npm config set registry <link_do_mojego_prywatnego_rejestru>
Przykładowo:
npm config set registry https://registry.npmjs.org/
przywraca konfigurację domyślną. Z kolei, jeśli chcemy zainstalować tylko jeden moduł z prywatnego rejestru, można to zrobić poleceniem:
npm install <pakiet> --registry <link_do_mojego_prywatnego_rejestru>
Pakiety NPM mogą być grupowane?
No dobrze, ale mamy kilka swoich modułów i chcielibyśmy, aby dało się tylko dla tej grupy ustawić osobny rejestr. Z pomocą przychodzi nam słowo kluczowe scope
. Zerknijmy, jak na npmjs.com wygląda angular. Zwróćmy uwagę na nazwy przykładowych pakietów:
@angular/typescript
@angular/compiler-cli
@angular/core
@angular
oznacza, że wszystkie te pakiety należą do jednego scope’a – czyli grupy pakietów. Przy instalacji możemy zdefiniować dla takiej grupy osobny rejestr. Robimy to za pomocą lekkiej zmiany polecenia z poprzedniego punktu:
npm config set <nazwa_scope>:registry <link_do_mojego_prywatnego_rejestru>
Ważne: nazwa scope’a zawsze zaczyna się od @
.
Możesz wybrać, którą wersję pakietu chcesz zainstalować?
Wystarczy zmodyfikować standardowe polecenie instalacji pakietu, przykładowo:
npm install vue@2.0.0
A jeśli pakiet jest w scope:
npm install @mojprywatnyscope/mojprywatnypakiet@2.0.0
Zamiast wersji można użyć tagu latest
:
npm install vue@latest
Albo zdefiniować zakres wersji:
npm install vue@">=2.0.0 <2.2.1"
Możesz instalować pakiet bezpośrednio z repozytorium?
Możesz sklonować całe repozytorium pakietu bezpośrednio z systemu kontroli wersji. W dodatku na kilka sposobów.
Z Githuba:
npm install github:Vakme/KernelBot
(nie ma to jak autoreklama)
Z Bitbucketa:
npm install bitbucket:mojnick/mojerepo
Można zaciągnąć Gista:
npm install gist:9227bd08f68c87ddc5f22a2993c39d63
A dla zaawansowanych: użyć własnego zdalnego repozytorium, według wzoru:
npm install <protokol>://[<uzytkownik>[:<haslo>]@]<adres_hosta>[:<port>][:][/]<sciezka>[#<wersja>]
gdzie dostępne protokoły to: git
, 'git+ssh,
git+http[s],
git+file`. Wchodzimy tutaj w klucze SSH i zmienne środowiskowe, także, jeśli chcecie, opiszę to polecenie innym razem. Z Dosią.
Albo użyć lokalnego modułu?
Zamiast instalacji i klonowania, można stworzyć link symboliczny do folderu z pakietem. Wystarczy w głównym folderze naszego projektu wykonać polecenie:
npm link <względna_ścieżka_do_folderu_z_pakietem>
Można również stworzyć link globalnie, najpierw wywołując polecenie npm link
w folderze pakietu, a następnie npm link <nazwa_pakietu>
w folderze projektu.
Możesz wybrać czynności do wykonania podczas instalacji?
Od razu po instalacji chcesz puścić testy? Nie ma problemu! Do dyspozycji mamy całą gamę skryptów, które możemy uruchomić w odpowiednim momencie. Wystarczy dodać je do części scripts
w package.json
w naszym projekcie. Przykładowo skrypt, który wykona się po npm install
:
{ "scripts" :
{ "postinstall" : "./tests"
}
}
Pora kończyć, bo post zrobił się już długi, a nie dotknęłam nawet problemu wrzucania własnego pakietu do NPM. Jak zwykle proszę o feedback, o pochwały i (szczególnie) o krytykę.
Wesołych Świąt!
Źródła: npm install – npm link – npm scope – npm scripts
Dodaj komentarz