Учебники

Node.js — NPM

Node Package Manager (NPM) предоставляет две основные функции —

  • Онлайн-репозитории для пакетов / модулей node.js, которые доступны для поиска на search.nodejs.org

  • Утилита командной строки для установки пакетов Node.js, управления версиями и управления зависимостями пакетов Node.js.

Онлайн-репозитории для пакетов / модулей node.js, которые доступны для поиска на search.nodejs.org

Утилита командной строки для установки пакетов Node.js, управления версиями и управления зависимостями пакетов Node.js.

NPM поставляется с Node.js, устанавливаемым после версии v0.6.3. Чтобы проверить то же самое, откройте консоль, введите следующую команду и посмотрите результат —

$ npm --version
2.7.1

Если вы используете старую версию NPM, то довольно легко обновить ее до последней версии. Просто используйте следующую команду от root —

$ sudo npm install npm -g
/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
npm@2.7.1 /usr/lib/node_modules/npm

Установка модулей с использованием NPM

Существует простой синтаксис для установки любого модуля Node.js —

$ npm install <Module Name>

Например, ниже приведена команда для установки известного модуля веб-фреймворка Node.js с именем express —

$ npm install express

Теперь вы можете использовать этот модуль в вашем js-файле следующим образом:

var express = require('express');

Глобальная и локальная установка

По умолчанию NPM устанавливает любую зависимость в локальном режиме. Здесь локальный режим относится к установке пакета в каталоге node_modules, лежащем в папке, где находится приложение Node. Локально развернутые пакеты доступны через метод require (). Например, когда мы установили экспресс-модуль, он создал каталог node_modules в текущем каталоге, где был установлен экспресс-модуль.

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

Кроме того, вы можете использовать команду npm ls для вывода списка всех локально установленных модулей.

Глобально установленные пакеты / зависимости хранятся в системном каталоге. Такие зависимости могут использоваться в функции CLI (интерфейс командной строки) любого node.js, но не могут быть импортированы с помощью require () в приложении Node напрямую. Теперь давайте попробуем установить экспресс-модуль с помощью глобальной установки.

$ npm install express -g

Это даст аналогичный результат, но модуль будет установлен глобально. Здесь в первой строке указана версия модуля и место его установки.

express@4.12.2 /usr/lib/node_modules/express
├── merge-descriptors@1.0.0
├── utils-merge@1.0.0
├── cookie-signature@1.0.6
├── methods@1.1.1
├── fresh@0.2.4
├── cookie@0.1.2
├── escape-html@1.0.1
├── range-parser@1.0.2
├── content-type@1.0.1
├── finalhandler@0.3.3
├── vary@1.0.0
├── parseurl@1.3.0
├── content-disposition@0.5.0
├── path-to-regexp@0.1.3
├── depd@1.0.0
├── qs@2.3.3
├── on-finished@2.2.0 (ee-first@1.1.0)
├── etag@1.5.1 (crc@3.2.1)
├── debug@2.1.3 (ms@0.7.0)
├── proxy-addr@1.0.7 (forwarded@0.1.0, ipaddr.js@0.1.9)
├── send@0.12.1 (destroy@1.0.3, ms@0.7.0, mime@1.3.4)
├── serve-static@1.9.2 (send@0.12.2)
├── accepts@1.2.5 (negotiator@0.5.1, mime-types@2.0.10)
└── type-is@1.6.1 (media-typer@0.3.0, mime-types@2.0.10)

Вы можете использовать следующую команду, чтобы проверить все модули, установленные глобально —

$ npm ls -g

Использование package.json

package.json присутствует в корневом каталоге любого приложения / модуля Node и используется для определения свойств пакета. Давайте откроем package.json экспресс-пакета, представленного в node_modules / express /

{
   "name": "express",
      "description": "Fast, unopinionated, minimalist web framework",
      "version": "4.11.2",
      "author": {
      
         "name": "TJ Holowaychuk",
         "email": "tj@vision-media.ca"
      },
   
   "contributors": [{
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
   }, 
   
   {
      "name": "Ciaran Jessup",
      "email": "ciaranj@gmail.com"
   },
   
   {
      "name": "Douglas Christopher Wilson",
      "email": "doug@somethingdoug.com"
   },
   
   {
      "name": "Guillermo Rauch",
      "email": "rauchg@gmail.com"
   },
   
   {
      "name": "Jonathan Ong",
      "email": "me@jongleberry.com"
   },
   
   {
      "name": "Roman Shtylman",
      "email": "shtylman+expressjs@gmail.com"
   },
   
   {
      "name": "Young Jae Sim",
      "email": "hanul@hanul.me"
   } ],
   
   "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": "express@4.11.2",
   "_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
   "_from": "express@*",
   "_npmVersion": "1.4.28",
   "_npmUser": {
      "name": "dougwilson",
      "email": "doug@somethingdoug.com"
   },
   
   "maintainers": [{
      "name": "tjholowaychuk",
      "email": "tj@vision-media.ca"
   },
   
   {
      "name": "jongleberry",
      "email": "jonathanrichardong@gmail.com"
   },
   
   {
      "name": "shtylman",
      "email": "shtylman@gmail.com"
   },
   
   {
      "name": "dougwilson",
      "email": "doug@somethingdoug.com"
   },
   
   {
      "name": "aredridel",
      "email": "aredridel@nbtsc.org"
   },
   
   {
      "name": "strongloop",
      "email": "callback@strongloop.com"
   },
   
   {
      "name": "rfeng",
      "email": "enjoyjava@gmail.com"
   }],
   
   "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!"
}

Атрибуты Package.json

  • name — название посылки

  • версия — версия пакета

  • описание — описание пакета

  • домашняя страница — домашняя страница пакета

  • автор — автор пакета

  • contributors — имя автора пакета

  • зависимости — список зависимостей. NPM автоматически устанавливает все зависимости, упомянутые здесь, в папке node_module пакета.

  • репозиторий — тип репозитория и URL пакета

  • main — точка входа пакета

  • ключевые слова — ключевые слова

name — название посылки

версия — версия пакета

описание — описание пакета

домашняя страница — домашняя страница пакета

автор — автор пакета

contributors — имя автора пакета

зависимости — список зависимостей. NPM автоматически устанавливает все зависимости, упомянутые здесь, в папке node_module пакета.

репозиторий — тип репозитория и URL пакета

main — точка входа пакета

ключевые слова — ключевые слова

Удаление модуля

Используйте следующую команду, чтобы удалить модуль Node.js.

$ npm uninstall express

Как только NPM удалит пакет, вы можете проверить его, посмотрев содержимое каталога / node_modules / или набрав следующую команду:

$ npm ls

Обновление модуля

Обновите файл package.json, измените версию обновляемой зависимости и выполните следующую команду.

$ npm update express

Поиск модуля

Поиск имени пакета с помощью NPM.

$ npm search express

Создать модуль

Создание модуля требует, чтобы был создан package.json. Давайте сгенерируем package.json, используя NPM, который сгенерирует базовый скелет 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)

Вам нужно будет предоставить всю необходимую информацию о вашем модуле. Вы можете воспользоваться помощью из вышеупомянутого файла package.json, чтобы понять значения различной запрашиваемой информации. После создания package.json используйте следующую команду, чтобы зарегистрироваться на сайте репозитория NPM, используя действительный адрес электронной почты.

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) mcmohd@gmail.com

Настало время опубликовать ваш модуль —

$ npm publish

Если с вашим модулем все в порядке, он будет опубликован в репозитории и будет доступен для установки с использованием NPM, как и любой другой модуль Node.js.