Node.js - NPM
Node Package Manager (NPM) предоставляет две основные функции:
Онлайн-репозитории для пакетов / модулей 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
[email protected] /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
Это даст аналогичный результат, но модуль будет установлен глобально. Здесь первая строка показывает версию модуля и место, где он устанавливается.
[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])
Вы можете использовать следующую команду, чтобы проверить все модули, установленные глобально -
$ 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": "[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!"
}
Атрибуты Package.json
name - название пакета
version - версия пакета
description - описание пакета
homepage - домашняя страница пакета
author - автор пакета
contributors - имя участников пакета
dependencies- список зависимостей. NPM автоматически устанавливает все упомянутые здесь зависимости в папку node_module пакета.
repository - тип репозитория и URL пакета
main - точка входа в пакет
keywords - ключевые слова
Удаление модуля
Используйте следующую команду, чтобы удалить модуль 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) [email protected]
Пришло время опубликовать ваш модуль -
$ npm publish
Если с вашим модулем все в порядке, то он будет опубликован в репозитории и будет доступен для установки с помощью NPM, как любой другой модуль Node.js.