Использование NPM

Node Hero: Глава 2

Andrey Melikhov
devSchacht
4 min readOct 9, 2017

--

Перевод книги Node Hero от RisingStack. Переведено с разрешения правообладателей.

Оглавление

В этой главе вы узнаете, что такое NPM и как его использовать. Давайте приступим к изучению!

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: Учебное пособие

Вы уже встречались с 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-скрипты

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.

Глава на GitHub

--

--

Andrey Melikhov
devSchacht

Web-developer in big IT company Перевожу всё, до чего дотянусь. Иногда (но редко) пишу сам.