Перевод книги Node Hero от RisingStack. Переведено с разрешения правообладателей.
В этой главе вы узнаете, что такое NPM и как его использовать. Давайте приступим к изучению!
NPM — это менеджер пакетов, используемый Node.js-приложениями. В нём вы можете найти массу готовых модулей, поэтому вам не нужно изобретать колесо. Это похоже на Maven для Java или Composer для PHP. Существует два основных интерфейса, с которыми вы будете взаимодействовать: сайт NPM и набор инструментов командной строки (CLI).
И веб-сайт, и CLI используют один и тот же реестр, чтобы искать и отображать модули.
Сайт NPM можно найти по адресу https://npmjs.com. Здесь вы можете зарегистрироваться как новый пользователь или поискать нужные пакеты.
Чтобы запустить CLI, достаточно написать:
npm
Обратите внимание, что NPM поставляется вместе с бинарным файлом Node.js, поэтому вам не нужно его устанавливать, однако если вы хотите использовать определенную версию NPM, вы можете его обновить. Если вы хотите установить NPM версии 3, вы можете сделать это с помощью: npm install npm@3 -g
.
Вы уже встречались с NPM в предыдущей главе, когда создавали файл package.json
. Давайте расширим наши знания!
В этом разделе вы узнаете, как добавлять рантайм зависимости к вашему приложению.
Когда у вас есть файл package.json
, вы можете добавить зависимости к вашему приложению. Давайте добавим одну! Попробуйте следующее:
npm install lodash --save
С помощью этой единственной команды мы достигли двух вещей: во-первых, lodash
загружен и помещён в папку node_modules
. Это папка, в которой будут находиться все ваши внешние зависимости. Обычно вы не хотите добавлять её в свою систему управления версиями, поэтому, если вы используете git, обязательно добавьте node_modules
в файл .gitignore
.
Это может быть хорошей отправной точкой для вашего .gitignore
(ссылка на GitHub).
Давайте посмотрим, что происходит в файле package.json
! Появилось новое свойство, называемое dependencies
:
"dependencies": {
"lodash": "4.6.1"
}
Это означает, что lodash
версии 4.6.1
теперь установлен и готов к использованию. Обратите внимание, что NPM следует правилам SemVer для версионирования пакетов.
Используя нумерацию версий вида MAJOR.MINOR.PATCH, повышайте MAJOR-версию, когда вы делаете несовместимые изменения API, MINOR-версию, когда вы добавляете функциональность обратно-совместимым образом, и PATCH-версию, когда вы делаете исправления ошибок с обратной совместимостью. Для получения дополнительной информации: http://semver.org/
Поскольку lodash
готов к использованию, давайте посмотрим, как мы можем им воспользоваться! Вы можете сделать это так же, как и с вашим собственным модулем, но теперь вам не нужно указывать полный путь, достаточно только имени модуля:
// index.js
const _ = require('lodash')
_.assign({ 'a': 1 }, { 'b': 2 }, { 'c': 3 });
// → { 'a': 1, 'b': 2, 'c': 3 }
В этом разделе вы узнаете, как добавлять зависимости, необходимые только во время сборки приложения.
Когда вы собираете веб-приложения, вам может потребоваться минимизировать ваши JavaScript-файлы, объединить CSS-файлы и так далее. Модули, которые это сделают, будут выполняться только во время создания ресурсов, поэтому работающее приложение не нуждается в них.
Вы можете установить такие скрипты с помощью:
npm install mocha --save-dev
После этого в вашем файле package.json
появится новый раздел, называемый devDependencies
. Все модули, которые вы устанавливаете с помощью --save-dev
, будут описаны там, а также они будут помещены в тот же самый каталог node_modules
.
NPM-скрипты — очень мощная концепция, с их помощью вы можете создавать небольшие утилиты или даже описывать сложные системы сборки.
Наиболее распространенными являются скрипты start
и test
. С помощью start
вы можете описать, как нужно запускать приложение, а test
используется для запуска тестов. В вашем package.json
они могут выглядеть примерно так:
"scripts": {
"start": "node index.js",
"test": "mocha test",
"your-custom-script": "echo npm"
}
Что следует здесь отметить:
start
: просто описывает начальную точку для запуска вашего приложения, этот скрипт можно вызвать с помощьюnpm start
.test
: цель этого скрипта заключается в том, чтобы запускать ваши тесты: одно из удобств такого запуска тестов заключается в том, что в этом случаеmocha
не нужно устанавливать глобально, так как NPM будет искать её в папкеnode_modules/.bin
, аmocha
будет размещена там же. Запуск тестов может быть вызван с помощьюnpm test
.your-custom-script
: всё, что вы захотите (вы можете выбрать любое имя). Его можно вызвать с помощьюnpm run your-custom-script
— не забывайте проrun
в этом случае!
Первоначально у NPM было глобальное пространство имен для названий модулей, и с более чем 250 000 модулями в реестре большинство простых имен уже заняты. Кроме того, глобальное пространство имен содержит только общедоступные модули.
В NPM урегулировали эту проблему внедрением пакетов с ограниченной областью видимости (scoped packages), они имеют следующий шаблон именования:
@myorg/mypackage
Вы можете устанавливать пакеты с ограниченной областью видимости так же, как и раньше:
npm install @myorg/mypackage --save-dev
Они будут отображаться в вашем package.json
следующим образом:
"dependencies": {
"@myorg/mypackage": "^1.0.0"
}
Подключения пакетов с ограниченной областью видимости работает должным образом:
require('@myorg/mypackage')
Для получения большей информации обратитесь к документации NPM-модулей с ограниченной областью видимости.
Слушайте наш подкаст в iTunes и SoundCloud, читайте нас на Medium, контрибьютьте на GitHub, общайтесь в группе Telegram, следите в Twitter и канале Telegram, рекомендуйте в VK и Facebook.