Szukaj…


Wprowadzenie

Menedżer pakietów Node (npm) zapewnia następujące dwie główne funkcje: Repozytoria online dla pakietów / modułów node.js, które można przeszukiwać na search.nodejs.org. Narzędzie wiersza polecenia do instalowania pakietów Node.js, zarządzania wersjami i zarządzania zależnościami pakietów Node.js.

Składnia

Parametry

Parametr Przykład
dostęp npm publish --access=public
kosz npm bin -g
edytować npm edit connect
Wsparcie npm help init
w tym npm init
zainstalować npm install
połączyć npm link
suszona śliwka npm prune
publikować npm publish ./
uruchom ponownie npm restart
początek npm start
zatrzymać npm start
aktualizacja npm update
wersja npm version

Instalowanie pakietów

Wprowadzenie

Pakiet to termin używany przez npm do oznaczenia narzędzi, z których programiści mogą korzystać w swoich projektach. Obejmuje to wszystko, od bibliotek i frameworków, takich jak jQuery i AngularJS, po programy uruchamiające zadania, takie jak Gulp.js. Pakiety będą node_modules się w folderze o nazwie zwykle node_modules , który również będzie zawierał plik package.json . Ten plik zawiera informacje dotyczące wszystkich pakietów, w tym wszelkich zależności, które są dodatkowymi modułami potrzebnymi do korzystania z określonego pakietu.

Npm używa wiersza poleceń zarówno do instalowania pakietów, jak i zarządzania nimi, więc użytkownicy próbujący używać npm powinni znać podstawowe komendy w swoim systemie operacyjnym, tj .: przeglądanie katalogów, a także być w stanie zobaczyć zawartość katalogów.


Instalowanie NPM

Pamiętaj, że aby zainstalować pakiety, musisz mieć zainstalowany NPM.

Zalecanym sposobem instalacji NPM jest użycie jednego z instalatorów ze strony pobierania Node.js. Możesz sprawdzić, czy masz już plik node.js, uruchamiając komendę npm -v lub npm version .

Po zainstalowaniu NPM za pomocą instalatora Node.js, sprawdź dostępność aktualizacji. Wynika to z faktu, że NPM jest aktualizowany częściej niż instalator Node.js. Aby sprawdzić dostępność aktualizacji, uruchom następujące polecenie:

npm install npm@latest -g

Jak zainstalować pakiety

Aby zainstalować jeden lub więcej pakietów, wykonaj następujące czynności:

npm install <package-name>
# or
npm i <package-name>...

# e.g. to install lodash and express
npm install lodash express

Uwaga : Spowoduje to zainstalowanie pakietu w katalogu, w którym aktualnie znajduje się wiersz poleceń, dlatego ważne jest sprawdzenie, czy wybrano odpowiedni katalog

Jeśli masz już plik package.json w bieżącym katalogu roboczym i zdefiniowane są w nim zależności, to npm install automatycznie rozwiąże i zainstaluje wszystkie zależności wymienione w pliku. Możesz także użyć skróconej wersji polecenia npm install która brzmi: npm i

Jeśli chcesz zainstalować określoną wersję pakietu użyj:

npm install <name>@<version>

# e.g. to install version 4.11.1 of the package lodash
npm install [email protected]

Jeśli chcesz zainstalować wersję pasującą do określonego zakresu wersji, użyj:

npm install <name>@<version range>

# e.g. to install a version which matches "version >= 4.10.1" and "version < 4.11.1"
# of the package lodash
npm install lodash@">=4.10.1 <4.11.1"

Jeśli chcesz zainstalować najnowszą wersję, użyj:

npm install <name>@latest

Powyższe polecenia będą wyszukiwać pakiety w centralnym repozytorium npm na npmjs.com . Jeśli nie chcesz instalować z rejestru npm , obsługiwane są inne opcje, takie jak:

# packages distributed as a tarball
npm install <tarball file>
npm install <tarball url>

# packages available locally
npm install <local path>

# packages available as a git repository
npm install <git remote url>

# packages available on GitHub
npm install <username>/<repository>

# packages available as gist (need a package.json)
npm install gist:<gist-id>

# packages from a specific repository
npm install --registry=http://myreg.mycompany.com <package name>

# packages from a related group of packages 
# See npm scope
npm install @<scope>/<name>(@<version>)

# Scoping is useful for separating private packages hosted on private registry from
# public ones by setting registry for specific scope
npm config set @mycompany:registry http://myreg.mycompany.com
npm install @mycompany/<package name>

Zazwyczaj moduły są instalowane lokalnie w folderze o nazwie node_modules , który można znaleźć w bieżącym katalogu roboczym. Jest to katalog, którego użyje moduł require() do ładowania modułów w celu ich udostępnienia.

Jeśli już utworzyłeś plik package.json , możesz użyć opcji --save (skrót) -S lub jednego z jego wariantów, aby automatycznie dodać zainstalowany pakiet do package.json jako zależność. Jeśli ktoś inny zainstaluje twój pakiet, npm automatycznie odczyta zależności z pliku package.json i zainstaluje wymienione wersje. Pamiętaj, że nadal możesz dodawać i zarządzać zależnościami, edytując plik później, więc zwykle dobrym pomysłem jest śledzenie zależności, na przykład za pomocą:

npm install --save <name> # Install dependencies 
# or
npm install -S <name> # shortcut version --save 
# or
npm i -S <name>

Aby zainstalować pakiety i zapisać je tylko wtedy, gdy są potrzebne do programowania, a nie do ich uruchamiania, a nie, jeśli są potrzebne do uruchomienia aplikacji, wykonaj następujące polecenie:

npm install --save-dev <name> # Install dependencies for development purposes
# or
npm install -D <name> # shortcut version --save-dev
# or
npm i -D <name>

Instalowanie zależności

Niektóre moduły nie tylko zapewniają bibliotekę do użycia, ale także zapewniają jeden lub więcej plików binarnych, które mają być używane za pomocą wiersza poleceń. Chociaż nadal można instalować te pakiety lokalnie, często zaleca się instalowanie ich globalnie, aby można było włączyć narzędzia wiersza polecenia. W takim przypadku npm automatycznie połączy pliki binarne z odpowiednimi ścieżkami (np. /usr/local/bin/<name> ), aby można było ich używać z wiersza poleceń. Aby zainstalować pakiet globalnie, użyj:

npm install --global <name>
# or
npm install -g <name>
# or
npm i -g <name>

# e.g. to install the grunt command line tool
npm install -g grunt-cli

Jeśli chcesz zobaczyć listę wszystkich zainstalowanych pakietów i powiązanych wersji w bieżącym obszarze roboczym, użyj:

npm list
npm list <name>

Dodanie opcjonalnego argumentu nazwy może sprawdzić wersję określonego pakietu.


Uwaga: Jeśli napotkasz problemy z uprawnieniami podczas globalnej instalacji modułu npm, oprzyj się pokusie wydania sudo npm install -g ... aby rozwiązać problem. Udzielanie skryptów innych firm do uruchamiania w systemie z podwyższonymi uprawnieniami jest niebezpieczne. Problem z uprawnieniami może oznaczać, że masz problem ze sposobem instalacji npm . Jeśli chcesz zainstalować Węzeł w środowiskach użytkowników w piaskownicy, możesz spróbować użyć nvm .

Jeśli masz narzędzia do budowania lub inne zależności tylko dla programistów (np. Grunt), możesz nie chcieć mieć ich w pakiecie z wdrażaną aplikacją. Jeśli tak jest, powinieneś mieć to jako zależność programistyczną, która jest wymieniona w package.json sekcji devDependencies . Aby zainstalować pakiet jako zależność tylko programistyczną, użyj opcji --save-dev (lub -D ).

npm install --save-dev <name> // Install development dependencies which is not included in production 
# or
npm install -D <name>

Zobaczysz, że pakiet jest następnie dodawany do devDependencies twojego package.json .

Aby zainstalować zależności od pobranego / sklonowanego projektu node.js, możesz po prostu użyć

npm install
# or
npm i

npm automatycznie odczyta zależności z package.json i je zainstaluje.

NPM za serwerem proxy

Jeśli twój dostęp do Internetu odbywa się za pośrednictwem serwera proxy, może być konieczne zmodyfikowanie poleceń instalacji npm, które mają dostęp do zdalnych repozytoriów. npm używa pliku konfiguracyjnego, który można zaktualizować za pomocą wiersza poleceń:

npm config set

Możesz zlokalizować ustawienia proxy z panelu ustawień przeglądarki. Po uzyskaniu ustawień proxy (adres URL serwera, port, nazwa użytkownika i hasło); musisz skonfigurować konfiguracje npm w następujący sposób.

$ npm config set proxy http://<username>:<password>@<proxy-server-url>:<port>
$ npm config set https-proxy http://<username>:<password>@<proxy-server-url>:<port>

username , password , pola port są opcjonalne. Po ich ustawieniu npm install npm i -g , npm i -g itp. Będzie działać poprawnie.

Zakresy i repozytoria

# Set the repository for the scope "myscope"
npm config set @myscope:registry http://registry.corporation.com

# Login at a repository and associate it with the scope "myscope"
npm adduser --registry=http://registry.corporation.com --scope=@myscope

# Install a package "mylib" from the scope "myscope"
npm install @myscope/mylib

Jeśli nazwa własnego pakietu zaczyna się od @myscope a zakres „myscope” jest powiązany z innym repozytorium, npm publish prześle pakiet do tego repozytorium.

Możesz również .npmrc te ustawienia w pliku .npmrc :

@myscope:registry=http://registry.corporation.com
//registry.corporation.com/:_authToken=xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxx

Jest to przydatne podczas automatyzacji kompilacji na serwerze CI np

Odinstalowywanie pakietów

Aby odinstalować jeden lub więcej pakietów zainstalowanych lokalnie, użyj:

npm uninstall <package name>

Polecenie odinstalowania dla npm ma pięć aliasów, których można również użyć:

npm remove <package name>
npm rm <package name>
npm r <package name>

npm unlink <package name>
npm un <package name>

Jeśli chcesz usunąć pakiet z pliku package.json w ramach dezinstalacji, użyj flagi --save (skrót: -S ):

npm uninstall --save <package name>
npm uninstall -S <package name>

Aby uzyskać zależność programistyczną, użyj flagi --save-dev (stenografia: -D ):

npm uninstall --save-dev <package name>
npm uninstall -D <package name>

Dla opcjonalnej zależności użyj flagi --save-optional (stenografia: -O ):

npm uninstall --save-optional <package name>
npm uninstall -O <package name>

W przypadku pakietów instalowanych globalnie użyj flagi --global (stenografia: -g ):

npm uninstall -g <package name>

Podstawowe wersje semantyczne

Przed opublikowaniem pakietu musisz go zaktualizować. npm obsługuje wersjonowanie semantyczne , co oznacza, że istnieją łatki, wersje drobne i główne .

Na przykład, jeśli Twój pakiet jest w wersji 1.2.3, aby zmienić wersję, musisz:

  1. wydanie łatki: npm version patch => 1.2.4
  2. drobne wydanie: npm version minor => 1.3.0
  3. wersja główna: npm version major => 2.0.0

Możesz także określić wersję bezpośrednio za pomocą:

npm version 3.1.4 => 3.1.4

Po ustawieniu wersji pakietu za pomocą jednej z powyższych komend npm, npm zmodyfikuje pole wersji pliku package.json, zatwierdzi go, a także utworzy nowy tag Git z wersją poprzedzoną „v”, tak jakby wydałem polecenie:

git tag v3.1.4

W przeciwieństwie do innych menedżerów pakietów, takich jak Bower, rejestr npm nie polega na tworzeniu znaczników Git dla każdej wersji. Ale jeśli lubisz używać tagów, pamiętaj o wypchnięciu nowo utworzonego tagu po zderzeniu wersji pakietu:

git push origin master (aby przekazać zmianę do pliku package.json)

git push origin v3.1.4 (w celu wypchnięcia nowego znacznika)

Lub możesz to zrobić za jednym zamachem za pomocą:

git push origin master --tags

Konfigurowanie konfiguracji pakietu

Konfiguracje pakietów Node.js są zawarte w pliku o nazwie package.json , który można znaleźć w katalogu głównym każdego projektu. Możesz skonfigurować nowy plik konfiguracyjny, dzwoniąc:

npm init

Spróbuje to odczytać bieżący katalog roboczy dla informacji repozytorium Git (jeśli istnieje) i zmiennych środowiskowych, aby spróbować autouzupełnić niektóre wartości zastępcze dla Ciebie. W przeciwnym razie zapewni okno dialogowe wprowadzania podstawowych opcji.

Jeśli chcesz utworzyć plik package.json z wartościami domyślnymi, użyj:

npm init --yes
# or
npm init -y 

Jeśli tworzysz plik package.json dla projektu, którego nie zamierzasz publikować jako pakiet npm (tj. Wyłącznie w celu zaokrąglenia zależności), możesz przekazać tę intencję w pliku package.json :

  1. Opcjonalnie ustaw wartość private na true, aby zapobiec przypadkowemu opublikowaniu.
  2. Opcjonalnie ustaw właściwość license na „Nielicencjonowane”, aby odmówić innym prawa do korzystania z Twojego pakietu.

Aby zainstalować pakiet i automatycznie zapisać go w package.json , użyj:

npm install --save <package>

Pakiet i powiązane metadane (takie jak wersja pakietu) pojawią się w twoich zależnościach. Jeśli zapiszesz jako zależność programistyczną (używając --save-dev ), pakiet zamiast tego pojawi się w twoich devDependencies .

Dzięki package.json bare-bones package.json podczas instalowania lub aktualizowania pakietów pojawią się komunikaty ostrzegawcze, informujące, że brakuje opisu i pola repozytorium. Chociaż zignorowanie tych wiadomości jest bezpieczne, możesz się ich pozbyć, otwierając plik package.json w dowolnym edytorze tekstu i dodając następujące wiersze do obiektu JSON:

[...]
"description": "No description",
"repository": {
  "private": true
},
[...]

Publikowanie pakietu

Najpierw upewnij się, że skonfigurowałeś swój pakiet (jak powiedziano w Konfigurowanie konfiguracji pakietu ). Następnie musisz zalogować się do npmjs.

Jeśli masz już użytkownika npm

npm login

Jeśli nie masz użytkownika

npm adduser

Aby sprawdzić, czy użytkownik jest zarejestrowany w bieżącym kliencie

npm config ls

Następnie, gdy pakiet będzie gotowy do publikacji, użyj

npm publish

I gotowe.

Jeśli musisz opublikować nową wersję, upewnij się, że zaktualizowałeś wersję pakietu, jak podano w Podstawowej wersji semantycznej . W przeciwnym razie npm nie pozwoli ci opublikować pakietu.

{
    name: "package-name",
    version: "1.0.4"
}

Uruchamianie skryptów

Możesz zdefiniować skrypty w package.json , na przykład:

{
  "name": "your-package",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "author": "",
  "license": "ISC",
  "dependencies": {},
  "devDependencies": {},
  "scripts": {
    "echo": "echo hello!"
  }
}

Aby uruchomić skrypt echo , uruchom npm run echo z wiersza poleceń. Arbitralne skrypty, takie jak echo powyżej, muszą być uruchamiane za pomocą npm run <script name> . npm ma również wiele oficjalnych skryptów uruchamianych na niektórych etapach życia pakietu (takich jak preinstall ). Zobacz tutaj pełny przegląd tego, jak npm obsługuje pola skryptu.

Skrypty npm są używane najczęściej do uruchamiania serwera, budowania projektu i uruchamiania testów. Oto bardziej realistyczny przykład:

  "scripts": {
    "test": "mocha tests",
    "start": "pm2 start index.js"
  }

We wpisach scripts programy wiersza polecenia, takie jak mocha będą działać, gdy zostaną zainstalowane globalnie lub lokalnie. Jeśli pozycja wiersza poleceń nie istnieje w systemie PATH, npm sprawdzi również lokalnie zainstalowane pakiety.

Jeśli twoje skrypty stają się bardzo długie, można je podzielić na części, takie jak to:

  "scripts": {
    "very-complex-command": "npm run chain-1 && npm run chain-2",
    "chain-1": "webpack",
    "chain-2": "node app.js"
  }

Usuwanie obcych pakietów

Aby usunąć niepotrzebne pakiety (pakiety, które są zainstalowane, ale nie znajdują się na liście zależności), uruchom następującą komendę:

npm prune

Aby usunąć wszystkie dev pakiety dodać --production flagę:

npm prune --production

Więcej na ten temat

Wyświetlanie aktualnie zainstalowanych pakietów

Aby wygenerować listę (widok drzewa) aktualnie zainstalowanych pakietów, użyj

npm list

ls , la i ll są aliasami polecenia list . Polecenia la i ll pokazują rozszerzone informacje, takie jak opis i repozytorium.

Opcje

Format odpowiedzi można zmienić, przekazując opcje.

npm list --json
  • json - Pokazuje informacje w formacie json
  • długi - pokazuje rozszerzone informacje
  • parseable - Pokazuje listę parsowalną zamiast drzewa
  • global - Pokazuje globalnie zainstalowane pakiety
  • głębokość - maksymalna głębokość wyświetlania drzewa zależności
  • dev / development - Pokazuje devDependencies
  • prod / production - Pokazuje zależności

Jeśli chcesz, możesz także przejść do strony głównej pakietu.

npm home <package name>

Aktualizowanie npm i pakietów

Ponieważ sam npm jest modułem Node.js, można go aktualizować za pomocą samego siebie.

Jeśli system operacyjny to Windows, musi być uruchomiony wiersz polecenia jako administrator

npm install -g npm@latest

Jeśli chcesz sprawdzić zaktualizowane wersje, możesz:

npm outdated

Aby zaktualizować konkretny pakiet:

npm update <package name>

Spowoduje to zaktualizowanie pakietu do najnowszej wersji zgodnie z ograniczeniami w pliku package.json

Jeśli chcesz również zablokować zaktualizowaną wersję w package.json:

npm update <package name> --save

Blokowanie modułów do określonych wersji

Domyślnie npm instaluje najnowszą dostępną wersję modułów zgodnie z wersją semantyczną każdej zależności. Może to być problematyczne, jeśli autor modułu nie przestrzega semver i wprowadza na przykład przełomowe zmiany w aktualizacji modułu.

Aby zablokować wersję każdej zależności (i wersje ich zależności itp.) Do konkretnej wersji zainstalowanej lokalnie w folderze node_modules , użyj

npm shrinkwrap

Spowoduje to utworzenie npm-shrinkwrap.json obok package.json który zawiera listę konkretnych wersji zależności.

Konfigurowanie globalnie zainstalowanych pakietów

Możesz użyć npm install -g aby zainstalować pakiet „globalnie”. Zwykle odbywa się to w celu zainstalowania pliku wykonywalnego, który można dodać do ścieżki uruchamiania. Na przykład:

npm install -g gulp-cli

Jeśli zaktualizujesz swoją ścieżkę, możesz bezpośrednio wywołać gulp .

W wielu systemach operacyjnych npm install -g spróbuje zapisać w katalogu, do którego użytkownik może nie mieć możliwości zapisu, np. /usr/bin . W tym przypadku nie powinieneś używać sudo npm install ponieważ istnieje ryzyko bezpieczeństwa związane z uruchamianiem dowolnych skryptów z sudo a użytkownik root może utworzyć katalogi w twoim domu, do których nie będziesz mógł pisać, co utrudni przyszłe instalacje.

Możesz powiedzieć npm gdzie należy zainstalować moduły globalne za pomocą pliku konfiguracyjnego ~/.npmrc . Nazywa się to prefix który można wyświetlić za pomocą npm prefix .

prefix=~/.npm-global-modules

Będzie używał prefiksu przy każdym uruchomieniu npm install -g . Możesz także użyć npm install --prefix ~/.npm-global-modules aby ustawić prefiks podczas instalacji. Jeśli prefiks jest taki sam jak twoja konfiguracja, nie musisz używać -g .

Aby korzystać z globalnie zainstalowanego modułu, musi znajdować się na Twojej ścieżce:

export PATH=$PATH:~/.npm-global-modules/bin

Teraz, gdy uruchomisz npm install -g gulp-cli , będziesz mógł używać gulp .

Uwaga: Kiedy npm install (bez -g ), prefiks będzie katalogiem z package.json lub katalogiem bieżącym, jeśli nie zostanie znaleziony w hierarchii. Spowoduje to również utworzenie katalogu node_modules/.bin które zawierają pliki wykonywalne. Jeśli chcesz użyć pliku wykonywalnego specyficznego dla projektu, nie musisz używać npm install -g . Możesz użyć tego w node_modules/.bin .

Łączenie projektów w celu szybszego debugowania i programowania

Budowanie zależności projektowych może czasem być żmudnym zadaniem. Zamiast publikować wersję pakietu w NPM i instalować zależność do testowania zmian, użyj npm link . npm link tworzy dowiązanie symboliczne, dzięki czemu najnowszy kod można przetestować w środowisku lokalnym. Ułatwia to testowanie globalnych narzędzi i zależności projektu, umożliwiając uruchomienie najnowszego kodu przed opublikowaniem wersji.

Tekst pomocy

NAME
       npm-link - Symlink a package folder

SYNOPSIS
         npm link (in package dir)
         npm link [<@scope>/]<pkg>[@<version>]

         alias: npm ln

Kroki łączenia zależności projektu

Podczas tworzenia łącza zależności należy pamiętać, że nazwa pakietu będzie tym, do którego będzie się odwoływał projekt nadrzędny.

  1. Płyta CD do katalogu zależności (np .: cd ../my-dep )
  2. npm link
  3. CD do projektu, który będzie korzystał z zależności
  4. npm link my-dep lub jeśli przestrzeń nazw npm link @namespace/my-dep

Kroki łączenia globalnego narzędzia

  1. Płyta CD do katalogu projektu (np .: cd eslint-watch )
  2. npm link
  3. Użyj narzędzia
  4. esw --quiet

Problemy, które mogą się pojawić

Łączenie projektów może czasem powodować problemy, jeśli zależność lub narzędzie globalne jest już zainstalowane. npm uninstall (-g) <pkg> a następnie uruchomienie npm link zwykle rozwiązuje wszelkie problemy, które mogą się pojawić.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow