NPM
1. Введение
Чтобы использовать все богатство инструментов (или пакетов) Node.js нам нужна возможность устанавливать и управлять ими. Для этого создан NPM (node package manager) - пакетный менеджер Node.js. Он устанавливает нужные пакеты и предоставляет удобный интерфейс для работы с ними.
NPM состоит из трех основных компонентов:
Сайт npmjs.com — используется для поиска и ознакомления с документацией пакетов.
Интерфейс командной строки (CLI) — запускается из терминала и предоставляет набор команд для работы с реестром и пакетами. Позволяет создавать скрипты для запуска в терминале.
Реестр пакетов (registry) — большая общедоступная база данных инструментов разработки (пакетов).
Пакет (package) — небольшая JS-библиотека, решающая специфическую задачу.
Пакеты пишут сами разработчики и делятся с сообществом. Такой подход упрощает жизнь, потому что не нужно изобретать колесо, все колеса уже давно лежат на полках реестра и готовы к использованию.
Пакеты абстрагируют реализацию функционала, предоставляя разработчику удобный интерфейс. Это делает код чище, читабельнее и позволяет легче его поддерживать.
2. Команды NPM
Сразу перечислим основные команды и будем последовательно использовать и рассматривать в деталях.
npm init
— инициализируетnpm
и создает файлpackage.json
npm install
— устанавливает все зависимости перечисленные вpackage.json
npm list --depth=0
- выведет в терминале список локально установленных пакетов с номерами их версий, без зависимостейnpm install [package-name]
— установит пакет локально в папкуnode_modules
npm uninstall [package-name]
— удалит пакет, установленный локально и обновитpackage.json
npm start
иnpm test
— запустит скриптstart
илиtest
, расположенный вpackage.json
npm run [custom-script]
— запустит кастомный скрипт, расположенный вpackage.json
npm outdated
— используется для поиска обновлений, обнаружит совместимые версии программно и выведет список доступных обновленийnpm update
— обновит все пакеты до максимально разрешенной версии
3. Инициализация проекта
Каждый проект начинается с создания файла package.json
— он отслеживает зависимости, содержит служебную информацию, позволяет писать npm-скрипты и служит инструкцией при создании нового проекта на основе уже готовых настроек.
Создать файл package.json
можно npm-командой init
, тем самым инициализировав проект в текущей папке.
npm init
Copy
Вам будет предложено ввести название проекта, версию, описание и т. д. Можно просто нажимать Enter
до тех пор, пока не будет создан package.json
и размещен в папке проекта.
Чтобы не нажимать Enter
, пропуская пустые поля, используется команда init
с флагом --yes
. Флаг — дополнительная настройка для команды.
npm init --yes
Copy
Будет создан package.json
со значениями по умолчанию. Чтобы установить эти значения, в терминале последовательно выполните следующие команды, подставив свое имя и почту.
npm config set init.author.name "YOUR_NAME"
npm config set init.author.email "YOUR_EMAIL"
Copy

Можно редактировать файл package.json
вручную или запустив npm init
еще раз. Если открыть package.json
в редакторе, он будет выглядеть примерно так. Это всего лишь метаданные о проекте.
{
"name": "node-tut",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Alexander Repeta <mycoolemail@mail.com>",
"license": "ISC",
"keywords": [],
"description": ""
}
Copy
4. NPM-скрипты
Скрипты позволяют запускать на исполнение установленные пакеты. Используя npm-скрипты, можно создавать целые системы сборки проекта.
Автоматизируем запуск index.js
. Для этого в файле package.json
в поле scripts
добавим скрипт запуска start
.
{
"scripts": {
"start": "node index.js"
}
}
Copy
Теперь мы можем запустить его в терминале командой npm start
.

Если создать скрипт с любым другим именем, кроме start
или test
, он будет запускаться как npm run имя-скрипта
— не забудьте run
.
How npm handles the "scripts" field
5. Установка пакетов
Одна из возможностей, которые предоставляет npm
— установка пакетов, которые извлекаются из реестра и распаковываются в папку node_modules
в корне проекта.
После того как файл package.json
создан, можно добавить зависимости в проект. Зависимостью называют npm-пакет, который используется при разработке. Это всевозможные утилиты и библиотеки.
Установим библиотеку validator.js для валидации строк, например ввода пользователя в поля формы.
npm install validator
Copy
NPM загрузил validator
и поместил его в node_modules
— папку, в которой будут находиться все внешние зависимости.
Не добавляйте папку node_modules
в систему контроля версий, у всех разработчиков она будет своя. Если вы используете Git
, не забывайте добавить папку node_modules
в файл .gitignore
Обратите внимание на созданный файл package-lock.json
— это журнал снимков дерева зависимостей проекта. Он гарантирует, что команда разработчиков использует одни и те же версии зависимостей. NPM автоматически обновляет его при добавлении, удалении и обновлении пакетов.
В package.json
появилась новая зависимость в поле dependencies
. Это означает, что validator
версии 11.1.0
был установлен как зависимость и готов к работе. Пакеты постоянно обновляются, версия может отличаться.
{
"dependencies": {
"validator": "^11.1.0"
}
}
Copy
Для того чтобы получить интерфейс пакета в коде, необходимо вызвать функцию require('имя-модуля')
, аргументом передав ей имя модуля без определения пути - это называется абсолютный импорт. Путь не нужен, так как по умолчанию поиск модуля будет происходить в папке node_modules
. Результатом своего выполнения функция вернет интерфейс модуля — объект с методами или просто функцию, зависит от пакета.
// index.js
const validator = require('validator');
const validateEmail = email => {
return validator.isEmail(email);
};
console.log(
'Is mango@mail.com a valid email?: ',
validateEmail('mango@mail.com'),
);
console.log(
'Is Mangozedog.com a valid email?: ',
validateEmail('Mangozedog.com'),
);
Copy
Выполнив в консоли npm start
получим.
Is mango@mail.com a valid email?: true
Is Mangozedog.com a valid email?: false
Copy
6. Удаление пакетов
Предположим, что установленная в предыдущем примере версия validator
вызывает проблемы с совместимостью. Мы можем удалить этот пакет и поставить более старую версию.
npm uninstall validator
Copy
7. Установка определенной версии пакета
Теперь установим нужную версию validator
. В команде установки номер версии указывается после символа @
.
npm install validator@1.0.0
Copy
Установка пакетов определенный версии используется в коммерческих проектах для того, чтобы гарантировать работу кодовой базы и возможность долгосрочной поддержки.
8. Типы зависимостей
Представьте торт, для его приготовления шефу нужны продукты, именно они войдут в состав торта. Но для приготовления понадобятся и инструменты вроде мисок, ложек, лопаток и т. п. А еще на кухне есть столы и печи, холодильники и т. д. - то, что используется для приготовления любого блюда, общие инструменты которые есть на кухне.
То же самое и с зависимостями проекта — некоторые будут использованы в результирующем продукте, другие необходимы только на стадии разработки, а есть такие, что необходимо использовать вне зависимости от проекта.
Именно для этого у команд npm install
и npm uninstall
существуют 3 флага.
--save
— указывает, что добавляется зависимость, которая войдет в финальный продукт. Пакет будет установлен локально, в папкуnode_modules
и будет добавлена запись в полеdependencies
вpackage.json
.--save-dev
— указывает, что добавляется зависимость разработки. Пакет будет установлен локально, в папкуnode_modules
, и будет добавлена запись в полеdevDependencies
вpackage.json
.--global
— указывает, что добавляется глобальная зависимость, то есть инструмент, который доступен для любого проекта. Пакет будет установлен глобально (в систему).
Если не указывать флаг, по умолчанию будет использован --save
.
9. Управление версиями пакетов
Пакеты имеют связанный с ними номер версии. Номера версий соответствуют стандарту SemVer.
npm outdated
— используется для поиска обновлений, обнаружит совместимые версии программно.npm update
— обновит все пакеты до максимально разрешенной версии.npm update [имя-пакета]
- обновит указанный пакет
Если вы не доверяете машинам 🤖, можно открыть package.json
и вручную поменять версии пакетов, после чего выполнить npm install
.
10. Управление кэшем
После установки пакета npm сохраняет его копию в кэше, поэтому при следующей его установке вам не нужно опять скачивать его из интернета. Кэш хранится в папке .npm
вашего домашнего каталога.
Эта папка со временем засоряется старыми пакетами и иногда ее полезно очищать, не слишком часто (пару раз в год), кеширование полезно, так как сокращает время установки уже использованных пакетов.
npm cache clean
Copy
11. Дополнительные материалы
Last updated