Від автора: Node Package Manager (NPM) надає дві основні функції: 1) онлайн-сховище для пакетів/модулів node.js, які можна знайти на search.nodejs.org; 2) утиліта командного рядка для установки пакетів Node.js, управління версіями і управління залежностями пакетів Node.js.
Node js NPM поставляється в комплекті з інсталяційним пакетом починаючи з версії v0.6.3. Щоб перевірити версію Node, відкрийте консоль і введіть наступну команду:
$ 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
Наприклад, наступна команда – встановлює популярний модуль фреймворку Node.js під назвою express:
$ npm install express
Тепер ви можете використовувати цей модуль в js-файлі наступним чином:
var express = require(‘express’);
Глобальна та локальна установка
За замовчуванням NPM встановлює будь-яку залежність в локальному режимі. Локальний режим означає, що пакет встановлюється в каталозі node_modules, який міститься у папці, де знаходиться додаток Node. Розгорнуті локально пакети доступні через метод require(). Наприклад, коли ми встановили модуль express, був створив каталог node_modules в поточному каталозі, де був встановлений даний модуль.
$ ls -l
total 0
drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules
Крім того, ви можете використовувати команду npm ls, щоб відобразити список всіх локально встановлених модулів. Глобально встановлені пакети/залежності зберігаються в системному каталозі. Такі залежності можуть використовуватися у функції CLI (інтерфейс командного рядка), але не можуть бути безпосередньо імпортовані з використанням require() у додатку Node. Тепер спробуємо встановити модуль express з допомогою глобальної установки.
$ npm install express -g
Ми отримаємо аналогічний результат, але тепер модуль встановлено глобально. У першому рядку відображається версія модуля і місце, де він встановлений.
Ви можете використовувати наступну команду для перевірки всіх глобально встановлених модулів:
$ npm ls -g
Використання package.json
package.json розташований в кореневому каталозі програми/модуля Node і використовується для визначення властивостей пакета. Давайте відкриємо package.json з пакету express, розташованого в 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-is invalid”: “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. Давайте створимо за допомогою NPM файл package.json, який буде генерувати базову структуру package.json.
$ npm init
This utility will you walk 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 –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.