Node.js - NPM

Node Package Manager (NPM) zapewnia dwie główne funkcje -

  • Repozytoria online pakietów / modułów node.js, które można przeszukiwać na search.nodejs.org

  • Narzędzie wiersza poleceń do instalowania pakietów Node.js, zarządzania wersjami i zarządzania zależnościami pakietów Node.js.

NPM jest dostarczany w pakiecie z instalacjami Node.js po wersji v0.6.3. Aby sprawdzić to samo, otwórz konsolę i wpisz następujące polecenie i zobacz wynik -

$ npm --version
2.7.1

Jeśli używasz starej wersji NPM, dość łatwo jest zaktualizować ją do najnowszej wersji. Po prostu użyj następującego polecenia od roota -

$ sudo npm install npm -g
/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
[email protected] /usr/lib/node_modules/npm

Instalowanie modułów za pomocą NPM

Istnieje prosta składnia instalacji dowolnego modułu Node.js -

$ npm install <Module Name>

Na przykład poniżej znajduje się polecenie instalacji słynnego modułu struktury sieciowej Node.js o nazwie express -

$ npm install express

Teraz możesz użyć tego modułu w swoim pliku js w następujący sposób -

var express = require('express');

Instalacja globalna vs lokalna

Domyślnie NPM instaluje dowolne zależności w trybie lokalnym. Tutaj tryb lokalny odnosi się do instalacji pakietu w katalogu node_modules leżącym w folderze, w którym znajduje się aplikacja Node. Pakiety wdrożone lokalnie są dostępne za pośrednictwem metody require (). Na przykład, kiedy zainstalowaliśmy moduł express, utworzył on katalog node_modules w bieżącym katalogu, w którym zainstalował moduł express.

$ ls -l
total 0
drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules

Alternatywnie możesz użyć npm ls polecenie, aby wyświetlić listę wszystkich lokalnie zainstalowanych modułów.

Globalnie zainstalowane pakiety / zależności są przechowywane w katalogu systemowym. Takie zależności mogą być używane w funkcji CLI (interfejs wiersza poleceń) dowolnego node.js, ale nie można ich importować bezpośrednio przy użyciu funkcji require () w aplikacji Node. Teraz spróbujmy zainstalować moduł ekspresowy przy użyciu instalacji globalnej.

$ npm install express -g

To da podobny wynik, ale moduł zostanie zainstalowany globalnie. Tutaj pierwsza linia pokazuje wersję modułu i lokalizację, w której jest instalowany.

[email protected] /usr/lib/node_modules/express
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
└── [email protected] ([email protected], [email protected])

Możesz użyć następującego polecenia, aby sprawdzić wszystkie moduły zainstalowane globalnie -

$ npm ls -g

Korzystanie z package.json

package.json znajduje się w katalogu głównym dowolnej aplikacji / modułu Node i służy do definiowania właściwości pakietu. Otwórzmy plik package.json pakietu ekspresowego obecnego wnode_modules/express/

{
   "name": "express",
      "description": "Fast, unopinionated, minimalist web framework",
      "version": "4.11.2",
      "author": {
      
         "name": "TJ Holowaychuk",
         "email": "[email protected]"
      },
   
   "contributors": [{
      "name": "Aaron Heckmann",
      "email": "[email protected]"
   }, 
   
   {
      "name": "Ciaran Jessup",
      "email": "[email protected]"
   },
   
   {
      "name": "Douglas Christopher Wilson",
      "email": "[email protected]"
   },
   
   {
      "name": "Guillermo Rauch",
      "email": "[email protected]"
   },
   
   {
      "name": "Jonathan Ong",
      "email": "[email protected]"
   },
   
   {
      "name": "Roman Shtylman",
      "email": "[email protected]"
   },
   
   {
      "name": "Young Jae Sim",
      "email": "[email protected]"
   } ],
   
   "license": "MIT", "repository": {
      "type": "git",
      "url": "https://github.com/strongloop/express"
   },
   
   "homepage": "https://expressjs.com/", "keywords": [
      "express",
      "framework",
      "sinatra",
      "web",
      "rest",
      "restful",
      "router",
      "app",
      "api"
   ],
   
   "dependencies": {
      "accepts": "~1.2.3",
      "content-disposition": "0.5.0",
      "cookie-signature": "1.0.5",
      "debug": "~2.1.1",
      "depd": "~1.0.0",
      "escape-html": "1.0.1",
      "etag": "~1.5.1",
      "finalhandler": "0.3.3",
      "fresh": "0.2.4",
      "media-typer": "0.3.0",
      "methods": "~1.1.1",
      "on-finished": "~2.2.0",
      "parseurl": "~1.3.0",
      "path-to-regexp": "0.1.3",
      "proxy-addr": "~1.0.6",
      "qs": "2.3.3",
      "range-parser": "~1.0.2",
      "send": "0.11.1",
      "serve-static": "~1.8.1",
      "type-is": "~1.5.6",
      "vary": "~1.0.0",
      "cookie": "0.1.2",
      "merge-descriptors": "0.0.2",
      "utils-merge": "1.0.0"
   },
   
   "devDependencies": {
      "after": "0.8.1",
      "ejs": "2.1.4",
      "istanbul": "0.3.5",
      "marked": "0.3.3",
      "mocha": "~2.1.0",
      "should": "~4.6.2",
      "supertest": "~0.15.0",
      "hjs": "~0.0.6",
      "body-parser": "~1.11.0",
      "connect-redis": "~2.2.0",
      "cookie-parser": "~1.3.3",
      "express-session": "~1.10.2",
      "jade": "~1.9.1",
      "method-override": "~2.3.1",
      "morgan": "~1.5.1",
      "multiparty": "~4.1.1",
      "vhost": "~3.0.0"
   },
   
   "engines": {
      "node": ">= 0.10.0"
   },
   
   "files": [
      "LICENSE",
      "History.md",
      "Readme.md",
      "index.js",
      "lib/"
   ],
   
   "scripts": {
      "test": "mocha --require test/support/env 
         --reporter spec --bail --check-leaks test/ test/acceptance/",
      "test-cov": "istanbul cover node_modules/mocha/bin/_mocha 
         -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
      "test-tap": "mocha --require test/support/env 
         --reporter tap --check-leaks test/ test/acceptance/",
      "test-travis": "istanbul cover node_modules/mocha/bin/_mocha 
         --report lcovonly -- --require test/support/env 
         --reporter spec --check-leaks test/ test/acceptance/"
   },
   
   "gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada",
   "bugs": {
      "url": "https://github.com/strongloop/express/issues"
   },
   
   "_id": "[email protected]",
   "_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
   "_from": "express@*",
   "_npmVersion": "1.4.28",
   "_npmUser": {
      "name": "dougwilson",
      "email": "[email protected]"
   },
   
   "maintainers": [{
      "name": "tjholowaychuk",
      "email": "[email protected]"
   },
   
   {
      "name": "jongleberry",
      "email": "[email protected]"
   },
   
   {
      "name": "shtylman",
      "email": "[email protected]"
   },
   
   {
      "name": "dougwilson",
      "email": "[email protected]"
   },
   
   {
      "name": "aredridel",
      "email": "[email protected]"
   },
   
   {
      "name": "strongloop",
      "email": "[email protected]"
   },
   
   {
      "name": "rfeng",
      "email": "[email protected]"
   }],
   
   "dist": {
      "shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
      "tarball": "https://registry.npmjs.org/express/-/express-4.11.2.tgz"
   },
   
   "directories": {},
      "_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz",
      "readme": "ERROR: No README data found!"
}

Atrybuty Package.json

  • name - nazwa pakietu

  • version - wersja pakietu

  • description - opis pakietu

  • homepage - strona główna pakietu

  • author - autor pakietu

  • contributors - nazwiska współpracowników pakietu

  • dependencies- lista zależności. NPM automatycznie instaluje wszystkie wymienione tutaj zależności w folderze node_module pakietu.

  • repository - typ repozytorium i adres URL pakietu

  • main - punkt wejścia pakietu

  • keywords - słowa kluczowe

Odinstalowywanie modułu

Użyj następującego polecenia, aby odinstalować moduł Node.js.

$ npm uninstall express

Gdy NPM odinstaluje pakiet, możesz go zweryfikować, patrząc na zawartość katalogu / node_modules / lub wpisz następujące polecenie -

$ npm ls

Aktualizacja modułu

Zaktualizuj plik package.json i zmień wersję zależności, która ma zostać zaktualizowana, i uruchom następujące polecenie.

$ npm update express

Wyszukaj moduł

Wyszukaj nazwę pakietu za pomocą NPM.

$ npm search express

Utwórz moduł

Utworzenie modułu wymaga wygenerowania pliku package.json. Wygenerujmy plik package.json za pomocą NPM, który wygeneruje podstawowy szkielet pakietu package.json.

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.

See 'npm help json' for definitive documentation on these fields
and exactly what they do.

Use 'npm install <pkg> --save' afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (webmaster)

Będziesz musiał podać wszystkie wymagane informacje o swoim module. Możesz skorzystać z pomocy wspomnianego powyżej pliku package.json, aby zrozumieć znaczenie różnych żądanych informacji. Po wygenerowaniu pliku package.json użyj następującego polecenia, aby zarejestrować się w witrynie repozytorium NPM przy użyciu prawidłowego adresu e-mail.

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) [email protected]

Nadszedł czas, aby opublikować Twój moduł -

$ npm publish

Jeśli z Twoim modułem wszystko jest w porządku, zostanie on opublikowany w repozytorium i będzie można go zainstalować za pomocą NPM, tak jak każdy inny moduł Node.js.