npm — это крупнейший в мире реестр программного обеспечения. Разработчики открытого кода со всех континентов используют npm для обмена и заимствования пакетов, а многие организации используют npm для управления частными разработками.
npm состоит из трех отдельных компонентов:
- веб-сайт2.интерфейс командной строки (CLI)3.реестр.
Yarn и pnpm — это альтернативы npm cli. Вы можете ознакомиться и с ними.
npm управляет загрузкой зависимостей вашего проекта.
Установка всех зависимостей
Если у проекта есть файл package.json, выполнив команду
npm install
Установка одного пакета
Более того, начиная с npm 5, эта команда добавляет в файл package.json зависимости. До версии 5 необходимо было добавить флаг —save.
1.save-dev устанавливает и добавляет запись в файл package.json devDependencies
2.no-save устанавливает, но не добавляет запись в файл package.json dependencies
3.save-optional устанавливает и добавляет запись в файл package.json optionalDependencies
4.no-optional предотвращает установку необязательных зависимостей.
Также можно использовать сокращенные варианты флагов:
- S: —save
- D: —save-dev
- O: —save-optional
Разница между devDependencies и dependencies заключается в том, что первый содержит инструменты разработки, например, библиотеку для тестирования, а второй поставляется вместе с приложением в продакшене.
Куда npm устанавливает пакеты?
Когда вы устанавливаете пакет с помощью npm, вы можете выполнить 2 типа установки:
- локальная установка
- глобальная установкаПо умолчанию, когда вы вводите команду npm install, например
npm install lodash
пакет устанавливается в текущее дерево файлов, в подпапку node_modules.
При этом npm также добавляет запись lodash в свойство dependencies файла package.json, находящегося в текущей папке.
Глобальная установка выполняется с помощью флага -g.
npm install -g lodash
Когда это происходит, npm не будет устанавливать пакет в локальную папку, а вместо этого будет использовать глобальное местоположение.
Где именно?
Команда npm root -g подскажет вам, где именно находится это место на вашей машине.
Руководство package.json
dependencies
Задает список пакетов npm, установленных в качестве зависимостей.
devDependencies
Задает список пакетов npm, установленных в качестве зависимостей для разработки.
Они отличаются от зависимостей тем, что предназначены для установки только на машине разработки и не нужны для запуска кода в продакшене.
Файл package-lock.json
Цель файла package-lock.json — отслеживать точную версию каждого установленного пакета, чтобы продукт на 100% воспроизводился одинаково, даже если пакеты обновляются их сопровождающими.
Это решает очень специфическую проблему, которую package.json оставил нерешенной. В файле package.json вы можете указать, какие версии вам нужны.
Мы установили express, который зависит от accepts, «array-flatten», «body-parser», «content-disposition», а эти пакеты требуют некоторых других пакетов.
Итак, в двух словах, если мы устанавливаем пакет и этот пакет, в свою очередь, требует других пакетов, то эти пакеты хранятся в package-lock.json.