Skip to content

Введение в менеджер пакетов npm

Знакомство с npm

npm - это стандартный менеджер пакетов для Node.js.

В сентябре 2022 года в реестре npm было зарегистрировано более 2,1 миллиона пакетов, что делает его крупнейшим в мире хранилищем кода на одном языке, и вы можете быть уверены, что там есть пакет (почти!) для всего.

Он начинался как способ загрузки и управления зависимостями пакетов Node.js, но с тех пор стал инструментом, используемым также во frontend JavaScript.

TIP

Yarn и pnpm являются альтернативами npm cli. Вы также можете их проверить.

Пакеты

Установка всех зависимостей

Вы можете установить все зависимости, перечисленные в вашем файле package.json, выполнив команду:

bash
npm install

она установит все, что нужно проекту, в папку node_modules, создав ее, если она еще не существует.

Установка отдельного пакета

Вы можете установить отдельный пакет, выполнив команду:

bash
npm install <имя-пакета>

Кроме того, начиная с npm 5, эта команда добавляет <имя-пакета> в зависимости файла package.json. До версии 5 вам нужно было добавить флаг --save.

Часто вы увидите больше флагов, добавленных к этой команде:

  • --save-dev (или -D), который добавляет пакет в раздел devDependencies файла package.json.
  • --no-save, который предотвращает сохранение пакета в файл package.json.
  • --no-optional, который предотвращает установку необязательных зависимостей.
  • --save-optional, который добавляет пакет в раздел optionalDependencies файла package.json.

Также можно использовать сокращения флагов:

  • -S: --save
  • -D: --save-dev
  • -O: --save-optional

Разница между devDependencies и dependencies заключается в том, что первые содержат инструменты разработки, такие как библиотека тестирования, а вторые поставляются вместе с приложением в production.

Что касается optionalDependencies, то разница в том, что сбой сборки зависимости не приведет к сбою установки. Но ваша программа несет ответственность за обработку отсутствия зависимости. Подробнее об необязательных зависимостях.

Обновление пакетов

Обновление также упрощается путем запуска

bash
npm update

Это обновит все зависимости до последней версии.

Вы также можете указать один пакет для обновления:

bash
npm update <package-name>

Удаление пакетов

Чтобы удалить пакет, вы можете запустить:

bash
npm uninstall <package-name>

Версионность

В дополнение к обычным загрузкам, npm также управляет версиями, поэтому вы можете указать любую конкретную версию пакета или требовать версию выше или ниже, чем вам нужно.

Часто вы обнаружите, что библиотека совместима только с основной версией другой библиотеки.

Или ошибка в последней версии библиотеки, все еще не исправленная, вызывает проблему.

Указание явной версии библиотеки также помогает поддерживать у всех одну и ту же версию пакета, чтобы вся команда работала с одной и той же версией до тех пор, пока не будет обновлен файл package.json.

Во всех этих случаях версионность очень помогает, и npm следует стандарту семантического версионирования (semver).

Вы можете установить конкретную версию пакета, запустив

bash
npm install <package-name>@<version>

Вы также можете установить последнюю версию пакета, запустив

bash
npm install <package-name>@latest

Запуск задач

Файл package.json поддерживает формат для указания задач командной строки, которые можно запустить с помощью

bash
npm run <task-name>

Например, если у вас есть файл package.json со следующим содержимым:

json
{
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}

Очень часто эта функция используется для запуска Webpack:

json
{
  "scripts": {
    "watch": "webpack --watch --progress --colors --config webpack.conf.js",
    "dev": "webpack --progress --colors --config webpack.conf.js",
    "prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
  }
}

Таким образом, вместо того, чтобы вводить эти длинные команды, которые легко забыть или ввести с ошибкой, вы можете запустить

bash
npm run watch
npm run dev
npm run prod