кація CommonJS Packages/1.0. Отримати документацію по структурі файлу package, json дозволяє наступна команда:
$ npm help json
Найпростіший файл package, json виглядає наступним чином:
{name: packageName ,: 1.0 ,: mainModuleName ,: {
mod1: lib/mod1" ,
mod2 raquo ;: lib/mod2
}
}
Файл представлений у форматі JSON, c. яким ви як програміст на JavaScript, повинно бути, зустрічалися вже сотні разів.
Найбільш важливі поля name і version. Значення name підставляється в URL-адреси і назви команд, тому вибирати його слід з урахуванням безпеки в цих контекстах. Якщо ми зберемося опублікувати пакет в загальнодоступному репозиторії npm-пакетів, то повинні перевірити, чи не чи зайняте обране ім'я. Для цього можна звернутися до сайту # justify gt; $ npm search packageName
Поле main служить тієї ж мети, що і в складових модулях (див. попередній розділ). Воно посилається на модуль, який слід завантажувати при виклику функції require ( packageName ). Пакети можуть містити багато модулів, і всі їх можна перерахувати в списку модулів.
Пакети можна упаковувати в tgz-архіви, що особливо зручно для поширення через Інтернет.
Пакет може оголошувати залежності від інших пакетів. Саме завдяки цій можливості npm здатний автоматично встановлювати модулі, необхідні тому, який встановлюється явно. Залежності оголошуються наступним чином:
dependencies :
{ foo : Laquo; 1.0.0 - 2.9999.9999
, bar : Laquo; gt;=1.0.2 lt; 2.1.2
}
Людям буде простіше знайти пакет в npm-репозиторії (# justify gt; description: My wonderful packages walks dogs" ,
homepage raquo ;: # justify gt; author" : dogwhisperer@dogs
До складу деяких npm-пакетів входять виконувані програми, які повинні бути встановлені в каталог, згаданий у змінній PATH для даного користувача. Вони оголошуються за допомогою поля bin. Це словник, що відображає імена команд на імена реалізують їх скриптів. Командні скрипти встановлюються в каталог, що містить виконуваний файл node, під зазначеним ім'ям.
bin: {
nodeload.js raquo ;: ./ nodeload.js, nl.js laquo ;: ./ nl.js '
}
У поле directories документується структура каталогів пакета. Каталог lib автоматично проглядається при пошуку завантажувальних модулів. Існують також поля для довічних файлів, сторінок керівництва і документації.
directories: {lib: ./ lib raquo ;, bin: ./ bin },
У поле scripts перераховуються скріптові команди, що запускаються на різних етапах життєвого циклу пакету, а саме: установка, активація, видалення, оновлення та ін. Для отримання додаткових відомостей про скриптових командах потрібно ввести наступну команду:
$ npm help scripts
Це лише короткий вступ в формат npm-пакетів, для отримання повної документації необхідно набрати npm help json.
Версії і діапазони версій пакетанічего не знає про номерах версій. Вона знає про модулях і може інтерпретувати структуру каталогів так, ніби це модуль. У Node є розвинена система пошуку модулів, але номери версій в ній не враховуються. Однак про номерах версій знає npm. Він застосовує модель семантичної версійності (див. Нижче) і, як ми бачили, може встановлювати модулі через Інтернет, шукати застарілі модулі і оновлювати їх. Всі ці операції залежать від версій, тому познайомимося ближче з тим, як npm обробляє номери і мітки версій.
Раніше ми використовували команду npm list для виведення списку встановлених пакетів, і в цьому списку відображалися також номери версій. Якщо ж потрібно дізнатися тільки номер версії конкретного модуля, то підійде наступна команда:
$ npm view express version
2.4.0
У всіх випадках, коли команда npm приймає ім'я пакету, ви можете дописати в кінець імені номер або мітку версії. Це дозволяє працювати з конкретною версією пакета. Наприклад, якщо ви протестували додаток з певною версією пакету в тестовій середовищі, то можете встановити ту ж версію і у виробничій:
$ npm install express @ 2.3.1 @ 1.2.2 ./node_modules/express/node_modules/mime@1.5.1 ./node_modules/express/node_modules/connect@0.2.0 ./node_modules/express/node_modules/qs
...