Funkcje NPM, o których istnieniu nie wiedzieliścieOkoło 5 minut

Linkowanie, grupowanie, pobieranie z gita i wiele, wiele więcej

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.

heaviest objects in the universe, including node_modules

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 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ę.

both is good

Wesołych Świąt!

Źródła: npm installnpm linknpm scopenpm scripts