Node.js to wieloplatformowe środowisko uruchomieniowe JavaScript o otwartym kodzie źródłowym. W ciągu ostatnich kilku lat stało się ono popularnym wyborem do tworzenia backendu stron internetowych ze względu na szybką wydajność wejścia/wyjścia (I/O) i bezkonkurencyjną składnię JavaScript. Ponadto jego elastyczny charakter pozwala na szybką personalizację, co wyróżnia tę technologię serwerową na tle konkurencji.
Menedżer pakietów Node.js — przegląd
Node.js Package Manager lub npm to domyślny menedżer pakietów dla języka JavaScript. Npm jest często używany do instalowania skryptów projektowych i obsługi zewnętrznych modułów w projekcie Node.js. Ponadto śledzi moduły zainstalowane w projekcie za pomocą pliku package.json , który znajduje się w katalogu projektu’s. Npm przechowuje i zapisuje następujące informacje:
- Moduły wymagane w projekcie i ich zainstalowane wersje, jeśli istnieją.
- Opis metadanych projektu, który zawiera między innymi szczegóły dotyczące autora i licencji.
- Skrypty wykonywalne do automatyzacji zadań związanych z projektem lub zorientowanych na cel.
W tym samouczku przeprowadzimy Cię przez kroki korzystania z modułów Node.js z npm i package.json.
Zaczynajmy!
Wymagania wstępne
Aby móc śledzić ten samouczek, będziesz potrzebować:
- Node.js musi być zainstalowany w Twoim systemie.
- Postępuj zgodnie z instrukcjami, aby zainstalować Node.js na Ubuntu 18.04
-
Najnowsza wersja systemu Ubuntu zainstalowana w Twoim systemie.
Krok 1: Utwórz plik package.json
Zacznijmy nasz samouczek od przykładowego, próbnego projektu korzystającego z modułu Node.js locator . Projekt ma na celu pobranie adresu IP użytkownika i udostępnienie wyniku jako kraju jego pochodzenia. Ponieważ skupiamy się na zrozumieniu korzystania z modułów Node.js z npm, nie ma potrzeby ręcznego pisania modułów. Zamiast tego użyjemy preinstalowanych i konfigurowalnych pakietów w naszym projekcie.
JSON lub JavaScript Object Notation to standardowy format używany do udostępniania i przesyłania danych. Na początku utworzymy plik JSON, który będzie przechowywać zależności oprogramowania i zarządzać nimi. Jednak ręczne tworzenie pliku package.json jest uciążliwe i czasochłonne. Dla uproszczenia użyjemy polecenia init do utworzenia pliku package.json zamiast wkładać wysiłek w pisanie dodatkowych bloków kodu w celu stworzenia naszego pliku JSON od zera.
-
init polecenie
Najpierw utwórzmy nowy folder za pomocą polecenia mkdir i nazwijmy go locator:
|
1 |
mkdir locator |
Następnie użyj polecenia cd , aby przejść do nowo utworzonego folderu:
|
1 |
cd locator |
Następnie wpisz npm , aby zainicjować interaktywny monit:
|
1 |
npm init |
Następnie zobaczysz dane wyjściowe:

1. name
Zostaniesz przekierowany do pola name swojego nowego projektu; bieżącego folderu. Zobaczysz domyślne wartości w nawiasach (). Aby ten samouczek był prosty i łatwy do zrozumienia, wybierzemy opcje domyślne. Naciśnij ENTER , aby zaakceptować i kontynuować.
2. version
Kolejną wartością jest nazwa pola version , co jest kluczowym wymaganiem, jeśli udostępniasz swój projekt w repozytorium pakietów npm .
|
Note: Pakiety Node.js są zgodne z przewodnikiem Semantic Versioning (semver). Pierwsza cyfra: wersja MAJOR , która zmienia się tylko wtedy, gdy zmienia się API. Druga cyfra: wersja MINOR , która zmienia się po dodaniu dodatkowych funkcji. Ostatnia cyfra: wersja PATCH , która zmienia się, gdy błąd zostanie naprawiony. |
3. description
Pole description to ciąg informacyjny opisujący działanie modułu Node.js. W naszej wersji demonstracyjnej projekt locator pobierze adres IP użytkownika i zwróci kraj pochodzenia.
|
Note: Zazwyczaj moduły posiadają plik index.js jako punkt wejścia. Jest to również właściwość main w pliku package.json, czyli punkt wejścia dla modułów npm. Jeśli jednak plik package.json nie zostanie znaleziony, Node.js automatycznie załaduje plik index.js . |
4. test polecenie
Jest to skrypt wykonywalny lub polecenie służące do uruchamiania testów projektu. Ponieważ testowanie wykracza poza zakres naszego samouczka, pomińmy je i naciśnijmy ENTER.
5. init polecenie
Polecenie init zapyta o repozytorium GitHub projektu. Ponownie pomińmy tę część i przejdźmy dalej.
6. keywords
Słowa kluczowe to tablica ciągów znaków używana do wyszukiwania repozytorium. Zaleca się, aby słowa kluczowe były dokładne i powiązane z projektem, co ułatwi ich śledzenie.
Wymień te słowa kluczowe jako ciągi znaków i rozdziel je przecinkami. W naszym projekcie wpisz ip, country, latitude, oraz longitude w wierszu poleceń, a zobaczysz je dołączone jako słowa kluczowe w package.json.
7. author
Traktuj pole author jako informację zwrotną i sposób interakcji z użytkownikami. Na przykład, jeśli użytkownicy wykryją błąd w Twoim module, mogą użyć tego pola, aby Cię o tym powiadomić i uzyskać pomoc w rozwiązaniu problemu.
-
Format: "Nazwa \<E-mail\> (Strona internetowa)".
-
Demo: "Paul\<paul@your_domain\> (https://your_domain)"
-
Dodanie adresu e-mail i strony internetowej jest opcjonalne. Możesz jednak określić prawidłowego autora i dodać swoje dane kontaktowe jako author. Potwierdź szczegóły i naciśnij ENTER.
8. license
Pole license ilustruje warunki prawne, które użytkownicy muszą znać podczas korzystania z Twojego modułu. Ponieważ Node.js moduły są open source, npm konfiguruje je na ISC-license automatycznie.
Przejdź do strony licencji open source i wybierz tę z Open Source Initiative, która najlepiej odpowiada Twoim potrzebom. Wpisz UNLICENSED w wierszu poleceń, jeśli nie potrzebujesz licencji dla swojego repozytorium. W naszym samouczku użyjemy domyślnej licencji ISC. Naciśnij ENTER , aby zakończyć ten proces.
Polecenie init utworzy plik package.json i wyświetli wynik:

Następnie naciśnij ENTER, aby kontynuować i utworzyć plik package.json . Nasz plik JSON będzie przechowywać rejestr wszystkich modułów i pakietów, które zainstalujemy w naszym projekcie.
W kolejnym kroku zainstalujemy zależności i moduły Node.js.
Krok 2: Instalacja zależności i modułów
Tworzenie niestandardowych bibliotek zewnętrznych jest czasochłonne i wymaga dużego wysiłku. Alternatywnie, najskuteczniejszym sposobem jest instalacja predefiniowanych zależności i bibliotek zewnętrznych. W naszym samouczku użyjemy biblioteki HTTP , aby umożliwić naszemu demonstracyjnemu modułowi lokalizatora wykonywanie zewnętrznych żądań API w celu zbierania danych geograficznych.
W tym poradniku użyjemy biblioteki axios do wykonywania żądań HTTP. Najpierw zainstalujmy axios:
|
1 |
npm install axios --save |
Zacznij od zainstalowania pakietu npm, a następnie wymień je, oddzielając spacjami. Dołącz również znacznik --save , aby upewnić się, że projekt zostanie zapisany jako zależność projektu.
Zobaczysz następujący wynik:

Otwórz plik package.json za pomocą nano lub dowolnego innego edytora tekstu:
|
1 |
nano package.json |
Zwróć uwagę na nowo dodaną właściwość wyróżnioną na dole bloku kodu:

-
Pobieranie zależności deweloperskich
Zależności deweloperskie (development dependencies) to pakiety używane podczas tworzenia projektu, które nie mają zastosowania w środowisku produkcyjnym ani przy utrzymaniu projektu. Choć zależności te mogą wydawać się nieprzydatne w obszarach produkcyjnych, odgrywają one znaczącą rolę w pisaniu i przepisywaniu kodu.
Podobnie jak lintery kodu, zależności deweloperskie odgrywają kluczową rolę w tworzeniu oprogramowania. Programiści najczęściej używają code linters do zachowania jednolitości i spójności stylu podczas rozwoju projektu, co w przeciwnym razie byłoby bezużyteczne na produkcji.
Zainstalujmy linter jako zależność deweloperską dla Twojego projektu. Użyj również flagi --save-dev , aby zapisać eslint jako zależność wymaganą do rozwoju projektu:
|
1 |
npm i eslint@6.0.0 --save-dev |
Dodaliśmy @6.0.0 do naszych zależności, aby przy aktualizacji modułów były one oznaczane wersją. Symbol @ powiadomi npm , aby wyszukać konkretny tag, który chcesz zainstalować. Teraz otwórz ponownie plik package.json :
|
1 |
nano package.json |
Zobaczysz następujący wynik:

- Automatycznie generowane pliki: node_modules oraz package-lock.json
Na początku, podczas instalowania pakietu w projekcie Node.js, pliki package.json oraz package-lock.json są tworzone automatycznie. Potwierdź obecność tych plików w katalogu roboczym:
![]()
Ponieważ większość zainstalowanych zależności jest przechowywana w node_modules folder, zaleca się nie dodawać tego folderu do repozytorium kontrolowanego wersjami. Wraz ze wzrostem liczby zainstalowanych zależności, rozmiar node_modules również rośnie.
Z kolei plik package-lock.json przechowuje informacje o dokładnych zainstalowanych wersjach, więc nie ma potrzeby dołączania node_modules jawnie. W przeciwieństwie do folderu node_modules możesz dodać ten plik do swojego repozytorium kontrolowanego wersjami, ponieważ zawiera on szczegółowy opis wszystkich zależności wraz z ich wersjami.
- Instalacja przy użyciu package.json
Pliki package.json oraz package-lock.json pozwalają na skonfigurowanie tych samych zależności projektu przed rozpoczęciem jego rozwoju. Przejdź do drzewa katalogów i utwórz nowy folder na tym samym poziomie katalogu co locator. Nazwij nowy folder cloned_locator:
|
1 2 |
cd .. mkdir cloned_locator |
Następnie przejdź do cloned_locator:
|
1 |
cd cloned_locator |
Zaimportuj pliki package.json oraz package-lock.json z locator do cloned_locator:
|
1 |
cp ../locator/package.json ../locator/package-lock.json . |
Znak . oznacha bieżący folder. Zainstaluj wymagane moduły za pomocą następującego polecenia:
|
1 |
npm i |
Początkowo npm sprawdzi plik package-lock.json w celu zainstalowania modułów. Jeśli plik lock jest niedostępny, odczyta plik package.json w celu określenia instalacji.
Ogólnie rzecz biorąc, instalacja z package-lock.json jest prosta, ponieważ plik lock zawiera dokładną wersję modułów i ich zależności. Oznacza to, że podczas instalacji przy użyciu package.json, npm zaoszczędzi dodatkowy czas wymagany na znalezienie kompatybilnej i stabilnej wersji.
Zignoruj zależności deweloperskie, dodając flagę --production :
|
1 |
npm i --production |
Następnie wróć do locator:
|
1 |
cd ../locator |
- Instalacje globalne
Do tej pory instalowaliśmy moduły npm lokalnie. Masz jednak również alternatywę w postaci globalnej instalacji pakietów i korzystania z nich za pomocą poleceń powłoki lub CLI. Na przykład możesz zarządzać bieżącym projektem locator za pomocą biblioteki Hexo i zarządzać swoją statyczną stroną internetową. Użyj następującego polecenia z flagą -g , aby zainstalować globalnie CLI Hexo :
|
1 |
npm i hexo-cli -g |
|
Uwaga: Jeśli napotkasz błąd podczas globalnej instalacji pakietów, wypróbuj to polecenie sudo npm i hexo-cli -g z uprawnieniami administratora (root). |
Użyj następującego polecenia, aby zweryfikować, czy pakiet został pomyślnie zainstalowany:
|
1 |
hexo --version |
Zobaczysz dane wyjściowe:

Krok 3: Zarządzanie i aktualizacja modułów
Menedżer pakietów ma do zaoferowania więcej niż tylko instalowanie modułów Node.js. Istnieje wiele opcji dostosowywania, dzięki którym możesz wyświetlać listę, aktualizować, odinstalowywać, a nawet dodawać warstwę zabezpieczeń według własnego uznania.
W tej sekcji dowiemy się, jak:
-
Wyświetlać listę modułów
-
Aktualizować moduły
-
Odinstalowywać moduły
-
Przeprowadzać audyt modułów
Omówmy każdy z nich szczegółowo:
-
Wyświetlanie listy modułów
Wyświetlanie listy modułów, jak sama nazwa wskazuje, dostarczy szczegółowych informacji o wszystkich modułach zainstalowanych w projekcie. Zamiast czytać plik package.json, możesz użyć polecenia ls lub list , aby szczegółowo poznać moduły swojego projektu:
|
1 |
npm ls |
Zobaczysz dane wyjściowe:

Domyślnie polecenie ls wyświetla całe drzewo zależności, które obejmuje zależności projektu oraz moduły, od których one zależą. Możesz jednak również uzyskać ogólny widok i jawnie wskazać konkretny moduł. Użyj następującego polecenia, aby sprawdzić zainstalowane moduły bez ich zależności:
|
1 |
npm ls --depth 0 |
Zobaczysz dane wyjściowe:

-
Aktualizacja modułów
Zawsze zaleca się aktualizowanie modułów npm, aby uniknąć awarii oprogramowania lub konfliktów. Użyj następującego polecenia, aby sprawdzić, czy istnieje potrzeba aktualizacji:
|
1 |
npm outdated |
Zobaczysz dane wyjściowe:

Omówmy szczegółowo każdy termin:
- Package: Wyświetla listę bieżących Package zainstalowanych w Twoim projekcie.
- Current: Pokazuje Current wersję pakietu.
- Wanted: Pokazuje npm wersję, która najlepiej pasuje do wymagań wersji w pliku package.json.
- Najnowsza: Pokazuje najnowszą wersję npm wydaną, którą należy zaktualizować w razie potrzeby.
- Lokalizacja: Pakiet Lokalizacja w drzewie zależności.
Zgodnie z sugestią, możemy zaktualizować nasz npm do stabilnej wersji. Użyj następującego polecenia, aby zaktualizować bieżący pakiet:
|
1 |
npm up eslint |
Zobaczysz wynik:

Zamiast aktualizować je pojedynczo, możesz również zaktualizować wszystkie moduły naraz za pomocą polecenia up :
|
1 |
npm up |
-
Odinstalowywanie modułów
Często zależność może nie dawać oczekiwanych rezultatów i konieczne jest stworzenie niestandardowej zależności. W takich sytuacjach masz możliwość odinstalowania zależności ze swoich plików package.json oraz package-lock.json . Przypuśćmy, że masz axios jako zależność i nie zapewnia ona zadowalających wyników. Bez wątpienia usuniesz to repozytorium ze swojego projektu. Użyj polecenia uninstall lub un , aby usunąć axios:
|
1 |
npm un axios |
Zobaczysz wynik:

Chociaż polecenie uninstall usunęło zależność, nie otrzymaliśmy żadnego powiadomienia o jej usunięciu. Wyświetlmy listę zależności, aby zobaczyć, ile ich teraz mamy:
|
1 |
npm ls --depth 0 |
Zobaczysz wynik bez zależności axios na liście:

-
Audytowanie modułów
Jeśli zależności zainstalowane w Twoim projekcie są podatne na potencjalne zagrożenia bezpieczeństwa, możesz je wykryć. Najpierw musisz zainstalować przestarzałą wersję modułu request, aby zobaczyć, jak działa moduł audytu:
|
1 |
npm i request@2.60.0 |
Zobaczysz wynik sugerujący naprawienie zagrożeń lub podatności:

Aby rozwinąć szczegóły dotyczące podatności i zagrożeń, użyj polecenia audit :
|
1 |
npm audit |
Zobaczysz szczegółowy raport bezpieczeństwa:

Aby rozwiązać te podatności, użyj polecenia fix :
|
1 |
npm audit fix |
Zobaczysz wynik:

Możesz zauważyć, że dwie z dziewięciu podatności zostały naprawione. Jednak pozostałe siedem podatności nadal występuje w Twoich zależnościach, ponieważ polecenie audit fix nie rozwiązuje wszystkich problemów. Aby rozwiązać ten problem, może być konieczna aktualizacja zależności do wyższej wersji przy użyciu innego API. Zachowaj ostrożność podczas aktualizacji, ponieważ istnieje prawdopodobieństwo, że możesz uszkodzić kod znajdujący się wyżej w drzewie zależności. Użyj następującego polecenia, aby potwierdzić, że podatności zniknęły:
|
1 |
npm audit fix --force |
Bądź ostrożny przy używaniu innego API do rozwiązywania zagrożeń związanych z podatnościami, ponieważ jeśli nie masz pewności, może to doprowadzić do uszkodzenia funkcjonalności kodu.
Podsumowanie
Podsumowując, zademonstrowaliśmy, jak używać modułów Node.js z npm oraz pliku package.json. Ponadto omówiliśmy metody listowania, aktualizowania, zarządzania, audytowania i odinstalowywania zależności naszych pakietów. Jako kolejne wyzwanie zachęcamy do wykorzystania pojęć omówionych w tym przewodniku i samodzielnego eksperymentowania z instalowaniem i testowaniem pakietów. Możesz również spróbować tworzyć aplikacje Node.js i konfigurować zależności, aby poszerzyć swoją wiedzę.
Poza tym istnieje wiele innych materiałów szkoleniowych na temat Node.js i JavaScript, które można znaleźć na naszym blogu:
- Instalacja Node.js na CentOS 8: kompletny przewodnik
- Łączenie PostgreSQL z aplikacjami Node.js: samouczek
- Używanie klienta HTTP Axios w aplikacji React: samouczek
- Jak wdrożyć aplikację Node.js (Express.js) za pomocą Dockera na Ubuntu 20.04
Miłego kodowania!
Komentarze
Brak komentarzy. Bądź pierwszy.