Node.js — это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом. За последние несколько лет она стала популярным выбором для серверной веб-разработки благодаря своей высокой производительности ввода-вывода (I/O) и непревзойденному синтаксису JavaScript. Кроме того, ее адаптивный характер позволяет выполнять быструю настройку, что выделяет эту серверную технологию среди конкурентов.
Пакетный менеджер Node.js — Обзор
Node.js Package Manager или npm — это пакетный менеджер по умолчанию для JavaScript. Npm часто используется для установки скриптов проекта и управления внешними модулями в проекте Node.js. Кроме того, он отслеживает модули, установленные в проекте, с помощью файла package.json , который находится в директории проекта. Npm хранит и записывает следующую информацию:
- Модули, необходимые для проекта, и их установленные версии, если таковые имеются.
- Метаданные с описанием проекта, которые включают, помимо прочего, сведения об авторе и лицензии.
- Исполняемые скрипты для автоматизации задач, связанных с проектом или ориентированных на конкретные цели.
В этом руководстве мы расскажем вам о шагах по использованию модулей Node.js с npm и package.json.
Давайте начнем!
Предварительные требования
Для выполнения этого руководства вам понадобится следующее:
- Node.js должен быть установлен в вашей системе.
- Следуйте инструкциям, чтобы установить Node.js на Ubuntu 18.04
-
Последняя версия установленной Ubuntu в вашей системе.
Шаг 1. Создание файла package.json
Давайте начнем наше руководство с примера фиктивного проекта, использующего модуль locator для Node.js. Цель проекта — собрать IP-адрес пользователя и вывести страну его происхождения. Поскольку мы сосредоточены на понимании использования модулей Node.js с npm, нет необходимости писать модули вручную. Вместо этого мы будем использовать предустановленные и настраиваемые пакеты в нашем проекте.
JSON или JavaScript Object Notation — это стандартный формат, используемый для обмена и передачи данных. Сначала мы создадим файл JSON, который будет хранить программные зависимости и управлять ими. Однако создание package.json вручную — это трудоемкий процесс, требующий много времени. Для простоты мы будем использовать команду init для создания файла package.json вместо того, чтобы тратить усилия на написание дополнительных блоков кода для создания нашего JSON с нуля.
-
init команда
Сначала давайте создадим новую папку с помощью команды mkdir и назовем ее locator:
|
1 |
mkdir locator |
Затем используйте команду cd для перехода в только что созданную папку:
|
1 |
cd locator |
Затем введите npm для инициализации интерактивного запроса:
|
1 |
npm init |
После этого вы увидите вывод:

1. name
Вы будете перенаправлены к name вашего нового проекта (текущая папка). Вы увидите значения по умолчанию в скобках (). Чтобы это руководство оставалось простым и понятным, мы выберем варианты по умолчанию. Нажмите ENTER для подтверждения и продолжения.
2. version
Следующее значение — это version (версия), что является ключевым требованием, если вы делитесь своим проектом в репозитории пакетов npm.
|
Note: Пакеты Node.js следуют руководству по семантическому версионированию (semver). First number: The MAJOR версия, которая меняется только при изменении API. Second Number: The MINOR версия, которая меняется при добавлении новых функций. Last number: The PATCH версия, которая меняется при исправлении ошибки или бага. |
3. description
Поле description — это информативная строка, описывающая работу модуля Node.js. В нашей демонстрации проект locator будет получать IP-адрес пользователя и возвращать страну происхождения.
|
Note: В основном модули имеют файл index.js в качестве точки входа. Это также свойство main в package.json, точка входа для модулей npm. Однако, если package.json не найден, Node.js автоматически загрузит index.js . |
4. test command
Это исполняемый скрипт или команда для запуска тестов вашего проекта. Поскольку тестирование выходит за рамки нашего руководства, давайте пропустим его и нажмем ENTER.
5. init command
Команда init запросит репозиторий GitHub для проекта. Опять же, давайте пропустим эту часть и продолжим.
6. keywords
Ключевые слова — это массив строк, используемых для поиска репозитория. Рекомендуется делать ключевые слова точными и соответствующими вашему проекту, чтобы их можно было легко отслеживать.
Перечислите эти ключевые слова в виде строк и разделите их запятыми. В нашем проекте введите ip, country, latitude, и longitude в командной строке, и вы увидите их в качестве ключевых слов в package.json.
7. author
Относитесь к полю author как к обратной связи и способу взаимодействия с вашими пользователями. Например, если пользователи обнаружат ошибку в вашем модуле, они могут использовать это поле, чтобы уведомить вас и устранить ошибку.
-
Формат: "Имя \<Email\> (Сайт)".
-
Демо: "Paul\<paul@your_domain\> (https://your_domain)"
-
Добавление адреса электронной почты и веб-сайта необязательно. Тем не менее, вы можете указать действительного автора и добавить свои контактные данные в качестве author. Подтвердите данные и нажмите ENTER.
8. license
Поле license иллюстрирует юридические условия, которые пользователи должны знать при использовании вашего модуля. Поскольку Node.js модули имеют открытый исходный код, npm автоматически настраивает его на ISC-license.
Перейдите на страницу лицензий с открытым исходным кодом и выберите Open Source Initiative, которая лучше всего соответствует вашим потребностям. Введите UNLICENSED в командной строке, если вам не нужна лицензия для вашего репозитория. В нашем руководстве мы будем использовать лицензию ISC по умолчанию. Нажмите ENTER , чтобы завершить этот процесс.
Команда init создаст файл package.json и отобразит результат:

Затем нажмите ENTER, чтобы продолжить и создать файл package.json . Наш JSON файл будет хранить записи обо всех модулях и пакетах, которые мы установим в нашем проекте.
На следующем шаге мы установим зависимости и модули Node.js.
Шаг 2. Установка зависимостей и модулей
Создание пользовательских внешних библиотек отнимает много времени и требует значительных усилий. В качестве альтернативы наиболее эффективным способом является установка предопределенных зависимостей и внешних библиотек. В нашем руководстве мы будем использовать библиотеку HTTP, чтобы позволить нашему демонстрационному модулю локатора делать внешний API-запрос для сбора географических данных.
В этом руководстве мы будем использовать библиотеку axios для выполнения HTTP-запросов. Сначала давайте установим axios:
|
1 |
npm install axios --save |
Начните с установки пакета npm, а затем перечислите их через пробел. Также добавьте флаг --save , чтобы убедиться, что проект сохранен как зависимость проекта.
Вы увидите следующий вывод:

Откройте файл package.json с помощью nano или любого другого текстового редактора по вашему выбору:
|
1 |
nano package.json |
Обратите внимание на вновь добавленное свойство, выделенное в нижней части блока кода:

-
Загрузка зависимостей для разработки
Зависимости для разработки (development dependencies) — это пакеты, используемые при разработке проекта и не имеющие применения при его развертывании (production) или обслуживании. Хотя эти зависимости могут казаться неэффективными в рабочей среде, они играют важную роль в написании и переписывании кода.
Как и линтеры кода, зависимости для разработки играют жизненно важную роль в создании программного обеспечения. В основном разработчики используют code linters для поддержания единообразия и согласованности стилей во время разработки проекта, что в противном случае бесполезно в рабочей среде.
Давайте установим линтер в качестве зависимости для разработки вашего проекта. Также используйте флаг --save-dev, чтобы сохранить eslint в качестве зависимости, необходимой для разработки:
|
1 |
npm i eslint@6.0.0 --save-dev |
Мы добавили @6.0.0 к нашей зависимости, чтобы при обновлении модулей они помечались версией. Символ @ сообщит npm о необходимости поиска конкретного тега, который вы хотите установить. Теперь снова откройте файл package.json файл:
|
1 |
nano package.json |
Вы увидите следующий вывод:

- Автоматически созданные файлы: node_modules и package-lock.json
В самом начале при установке пакета в проект Node.js файлы package.json и package-lock.json создаются автоматически. Проверьте наличие этих файлов в рабочем каталоге:
![]()
Поскольку большинство установленных зависимостей хранятся в node_modules папку, рекомендуется не добавлять эту папку в ваш репозиторий системы контроля версий. С увеличением количества установленных зависимостей размер node_modules также увеличивается.
И наоборот, файл package-lock.json хранит записи о точных установленных версиях, поэтому нет необходимости явно включать node_modules . В отличие от папки node_modules вы можете зафиксировать этот файл в своем репозитории системы контроля версий, поскольку он содержит подробное представление всех ваших зависимостей вместе с их версиями.
- Установка с помощью package.json
Файлы package.json и package-lock.json позволяют настроить те же зависимости проекта перед началом разработки проекта. Перейдите в дерево каталогов и создайте новую папку на том же уровне каталога, что и locator. Назовите новую папку cloned_locator:
|
1 2 |
cd .. mkdir cloned_locator |
Затем перейдите в cloned_locator:
|
1 |
cd cloned_locator |
Импортируйте файлы package.json и package-lock.json из locator в cloned_locator:
|
1 |
cp ../locator/package.json ../locator/package-lock.json . |
Символ . означает текущую папку. Установите необходимые модули с помощью следующей команды:
|
1 |
npm i |
Сначала npm проверит файл package-lock.json для установки модулей. Если lock-файл недоступен, он считывает файл package.json для определения устанавливаемых пакетов.
В целом, установка из package-lock.json выполняется просто, поскольку lock-файл содержит точные версии модулей и их зависимостей. Это означает, что при установке с использованием package.json, npm сэкономит дополнительное время, необходимое для поиска совместимой и стабильной версии.
Игнорируйте зависимости для разработки, добавив тег --production :
|
1 |
npm i --production |
После этого вернитесь в locator:
|
1 |
cd ../locator |
- Глобальные установки
До сих пор мы устанавливали модули npm локально. Однако у вас также есть альтернатива — устанавливать пакеты глобально и использовать их через команду оболочки или CLI. Например, вы можете управлять текущим проектом locator с помощью библиотеки Hexo и управлять своим статическим веб-сайтом. Используйте следующую команду с тегом -g для глобальной установки CLI Hexo :
|
1 |
npm i hexo-cli -g |
|
Примечание: Если вы получаете ошибку при глобальной установке пакетов, попробуйте эту команду sudo npm i hexo-cli -g с учетными данными суперпользователя (root). |
Используйте следующую команду, чтобы убедиться, что пакет был успешно установлен:
|
1 |
hexo --version |
Вы увидите вывод:

Шаг 3: Управление и обновление модулей
Менеджер пакетов делает гораздо больше, чем просто устанавливает модули Node.js. Существует множество вариантов настройки, с помощью которых вы можете просматривать список, обновлять, удалять или даже добавлять уровень безопасности по своему усмотрению.
В этом разделе мы узнаем, как:
-
Выводить список модулей
-
Обновлять модули
-
Удалять модули
-
Проводить аудит модулей
Давайте обсудим каждый пункт подробно:
-
Вывод списка модулей
Вывод списка модулей, как следует из названия, предоставит вам подробную информацию обо всех модулях, установленных в проекте. Вместо чтения файла package.json вы можете использовать команду ls или list для подробного ознакомления с модулями вашего проекта:
|
1 |
npm ls |
Вы увидите вывод:

По умолчанию команда ls выводит все дерево зависимостей, которое включает зависимости проекта и модули, от которых они зависят. Однако вы также можете получить общий обзор и явно нацелиться на конкретный модуль. Используйте следующую команду, чтобы проверить установленные вами модули без их зависимостей:
|
1 |
npm ls --depth 0 |
Вы увидите вывод:

-
Обновление модулей
Всегда рекомендуется обновлять модули npm, чтобы не сталкиваться со сбоями или конфликтами программного обеспечения. Используйте следующую команду, чтобы проверить необходимость обновления:
|
1 |
npm outdated |
Вы увидите вывод:

Давайте подробно разберем каждый термин:
- Пакет (Package): Здесь перечислены текущие Package , установленные в вашем проекте.
- Текущая версия (Current): Здесь показана Current версия пакета.
- Требуемая версия (Wanted): Показывает версию, которую npm версию, которая лучше всего соответствует требованиям к версии в package.json.
- Latest: Она показывает последнюю выпущенную версию npm, которую вам необходимо обновить при необходимости.
- Location: Пакет Location в дереве зависимостей.
Как и предлагалось, мы можем обновить наш npm до стабильной версии. Используйте следующую команду для обновления текущего пакета:
|
1 |
npm up eslint |
Вы увидите вывод:

Вместо того чтобы обновлять их по одному, вы также можете обновить все модули сразу с помощью up команды:
|
1 |
npm up |
-
Удаление модулей
Часто зависимость может не давать ожидаемого результата, и вам требуется создать настроенную зависимость. В таких сценариях у вас есть возможность удалить зависимости из ваших файлов package.json и package-lock.json файлов. Предположим, у вас есть axios в качестве зависимости, и она не дает удовлетворительного результата. Вы, несомненно, удалите этот репозиторий из своего проекта. Используйте команду uninstall или un для удаления axios:
|
1 |
npm un axios |
Вы увидите вывод:

Хотя команда uninstall удалила зависимость, мы не получили никакого уведомления о ее удалении. Давайте выведем список зависимостей, чтобы посмотреть, сколько их у нас сейчас:
|
1 |
npm ls --depth 0 |
Вы увидите вывод, в котором зависимость axios отсутствует в списке:

-
Аудит модулей
Если установленные в вашем проекте зависимости подвержены потенциальным угрозам безопасности, вы можете их обнаружить. Сначала вам нужно установить устаревшую версию модуля request, чтобы увидеть, как работает аудит модулей:
|
1 |
npm i request@2.60.0 |
Вы увидите вывод с предложением исправить угрозы или уязвимости:

Чтобы просмотреть подробную информацию об уязвимостях и угрозах, используйте audit команду:
|
1 |
npm audit |
Вы увидите подробный отчет по безопасности:

Чтобы устранить эти уязвимости, используйте fix команду:
|
1 |
npm audit fix |
Вы увидите вывод:

Вы могли заметить, что две из девяти уязвимостей были устранены. Однако оставшиеся семь уязвимостей сохраняются в ваших зависимостях, поскольку audit fix не решает все проблемы. Чтобы решить эту проблему, вам может потребоваться обновить зависимость до более высокой версии с использованием другого API. Будьте осторожны при обновлении, так как существует вероятность того, что вы можете нарушить работу кода выше по дереву зависимостей. Используйте следующую команду, чтобы подтвердить, что уязвимости исчезли:
|
1 |
npm audit fix --force |
Будьте внимательны при использовании другого API для устранения угроз уязвимостей, потому что, если вы не уверены в этом, это может привести к нарушению функциональности кода.
Заключение
В заключение мы продемонстрировали, как использовать модули Node.js с npm и package.json. Кроме того, мы рассмотрели методы вывода списка, обновления, управления, аудита и удаления зависимостей наших пакетов. В качестве следующего шага мы рекомендуем вам использовать концепции, описанные в этом руководстве, и поэкспериментировать с самостоятельной установкой и тестированием пакетов. Вы также можете попробовать создавать приложения Node.js и настраивать зависимости, чтобы повысить свой уровень знаний.
Кроме того, существует множество других учебных материалов по темам Node.js и JavaScript, которые вы можете найти в нашем блоге:
- Установка Node.js на CentOS 8: полное руководство
- Подключение PostgreSQL к приложениям Node.js: руководство
- Использование HTTP-клиента Axios в приложении React: руководство
- Как развернуть приложение Node.js (Express.js) с помощью Docker на Ubuntu 20.04
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.