NPM
Last updated
Last updated
Чтобы использовать все богатство инструментов (или пакетов) Node.js нам нужна возможность устанавливать и управлять ими. Для этого создан NPM (node package manager) - пакетный менеджер Node.js. Он устанавливает нужные пакеты и предоставляет удобный интерфейс для работы с ними.
NPM состоит из трех основных компонентов:
Сайт — используется для поиска и ознакомления с документацией пакетов.
Интерфейс командной строки (CLI) — запускается из терминала и предоставляет набор команд для работы с реестром и пакетами. Позволяет создавать скрипты для запуска в терминале.
Реестр пакетов (registry) — большая общедоступная база данных инструментов разработки (пакетов).
Пакет (package) — небольшая JS-библиотека, решающая специфическую задачу.
Пакеты пишут сами разработчики и делятся с сообществом. Такой подход упрощает жизнь, потому что не нужно изобретать колесо, все колеса уже давно лежат на полках реестра и готовы к использованию.
Пакеты абстрагируют реализацию функционала, предоставляя разработчику удобный интерфейс. Это делает код чище, читабельнее и позволяет легче его поддерживать.
Сразу перечислим основные команды и будем последовательно использовать и рассматривать в деталях.
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
— обновит все пакеты до максимально разрешенной версии
Каждый проект начинается с создания файла package.json
— он отслеживает зависимости, содержит служебную информацию, позволяет писать npm-скрипты и служит инструкцией при создании нового проекта на основе уже готовых настроек.
Создать файл package.json
можно npm-командой init
, тем самым инициализировав проект в текущей папке.
Вам будет предложено ввести название проекта, версию, описание и т. д. Можно просто нажимать Enter
до тех пор, пока не будет создан package.json
и размещен в папке проекта.
Чтобы не нажимать Enter
, пропуская пустые поля, используется команда init
с флагом --yes
. Флаг — дополнительная настройка для команды.
Будет создан package.json
со значениями по умолчанию. Чтобы установить эти значения, в терминале последовательно выполните следующие команды, подставив свое имя и почту.
Можно редактировать файл package.json
вручную или запустив npm init
еще раз. Если открыть package.json
в редакторе, он будет выглядеть примерно так. Это всего лишь метаданные о проекте.
Скрипты позволяют запускать на исполнение установленные пакеты. Используя npm-скрипты, можно создавать целые системы сборки проекта.
Автоматизируем запуск index.js
. Для этого в файле package.json
в поле scripts
добавим скрипт запуска start
.
Теперь мы можем запустить его в терминале командой npm start
.
Если создать скрипт с любым другим именем, кроме start
или test
, он будет запускаться как npm run имя-скрипта
— не забудьте run
.
Одна из возможностей, которые предоставляет npm
— установка пакетов, которые извлекаются из реестра и распаковываются в папку node_modules
в корне проекта.
После того как файл package.json
создан, можно добавить зависимости в проект. Зависимостью называют npm-пакет, который используется при разработке. Это всевозможные утилиты и библиотеки.
NPM загрузил validator
и поместил его в node_modules
— папку, в которой будут находиться все внешние зависимости.
Не добавляйте папку node_modules
в систему контроля версий, у всех разработчиков она будет своя. Если вы используете Git
, не забывайте добавить папку node_modules
в файл .gitignore
Обратите внимание на созданный файл package-lock.json
— это журнал снимков дерева зависимостей проекта. Он гарантирует, что команда разработчиков использует одни и те же версии зависимостей. NPM автоматически обновляет его при добавлении, удалении и обновлении пакетов.
В package.json
появилась новая зависимость в поле dependencies
. Это означает, что validator
версии 11.1.0
был установлен как зависимость и готов к работе. Пакеты постоянно обновляются, версия может отличаться.
Для того чтобы получить интерфейс пакета в коде, необходимо вызвать функцию require('имя-модуля')
, аргументом передав ей имя модуля без определения пути - это называется абсолютный импорт. Путь не нужен, так как по умолчанию поиск модуля будет происходить в папке node_modules
. Результатом своего выполнения функция вернет интерфейс модуля — объект с методами или просто функцию, зависит от пакета.
Выполнив в консоли npm start
получим.
Предположим, что установленная в предыдущем примере версия validator
вызывает проблемы с совместимостью. Мы можем удалить этот пакет и поставить более старую версию.
Теперь установим нужную версию validator
. В команде установки номер версии указывается после символа @
.
Установка пакетов определенный версии используется в коммерческих проектах для того, чтобы гарантировать работу кодовой базы и возможность долгосрочной поддержки.
Представьте торт, для его приготовления шефу нужны продукты, именно они войдут в состав торта. Но для приготовления понадобятся и инструменты вроде мисок, ложек, лопаток и т. п. А еще на кухне есть столы и печи, холодильники и т. д. - то, что используется для приготовления любого блюда, общие инструменты которые есть на кухне.
То же самое и с зависимостями проекта — некоторые будут использованы в результирующем продукте, другие необходимы только на стадии разработки, а есть такие, что необходимо использовать вне зависимости от проекта.
Именно для этого у команд npm install
и npm uninstall
существуют 3 флага.
--save
— указывает, что добавляется зависимость, которая войдет в финальный продукт. Пакет будет установлен локально, в папку node_modules
и будет добавлена запись в поле dependencies
в package.json
.
--save-dev
— указывает, что добавляется зависимость разработки. Пакет будет установлен локально, в папку node_modules
, и будет добавлена запись в поле devDependencies
в package.json
.
--global
— указывает, что добавляется глобальная зависимость, то есть инструмент, который доступен для любого проекта. Пакет будет установлен глобально (в систему).
Если не указывать флаг, по умолчанию будет использован --save
.
npm outdated
— используется для поиска обновлений, обнаружит совместимые версии программно.
npm update
— обновит все пакеты до максимально разрешенной версии.
npm update [имя-пакета]
- обновит указанный пакет
Если вы не доверяете машинам 🤖, можно открыть package.json
и вручную поменять версии пакетов, после чего выполнить npm install
.
После установки пакета npm сохраняет его копию в кэше, поэтому при следующей его установке вам не нужно опять скачивать его из интернета. Кэш хранится в папке .npm
вашего домашнего каталога.
Эта папка со временем засоряется старыми пакетами и иногда ее полезно очищать, не слишком часто (пару раз в год), кеширование полезно, так как сокращает время установки уже использованных пакетов.
Установим библиотеку для валидации строк, например ввода пользователя в поля формы.
Пакеты имеют связанный с ними номер версии. Номера версий соответствуют стандарту .