Как установить зависимости npm из package json
npm — это менеджер пакетов, который управляет модулями и зависимостями проекта. В Node.js npm уже имеется по умолчанию, поэтому его отдельная установка не требуется.
Все пакеты хранятся в облачном репозитории на официальном сайте. Вы также можете создать свой модуль и опубликовать его в репозитории для общего использования.
Прежде, чем начинать разрабатывать собственный модуль, попробуйте поискать его в npm репозитории. Наверняка уже будет существовать готовое решение, которое сэкономит ваше время.
Node.js npm также избавляет разработчика от необходимости хранить все используемые сторонние модули в удаленных репозиториях. За это отвечает файл package.json .
package.json¶
В npm файл package.json используется для описания модулей, от которых зависимо ваше приложение, и содержит ряд метаданных о приложении. Рассмотрим на примере. Предположим, у вас есть проект, корневая директория которого называется app . Перейдите в app через командную строку и введите команду.
Вам будет предложено ввести некоторые данные, на основе которых Node.js npm сгенерирует файл package.json . Структура файла:
- name — название приложения;
- version — версия;
- description — описание;
- main — главный файл приложения, который отвечает за его запуск (хорошей практикой считается давать название app.js или index.js );
- scripts — объект, описывающий команды, которые часто приходится выполнять в процессе разработки и упрощающий их использование;
- repository — ссылка на Git репозиторий, где хранится проект;
- keywords — массив ключевых слов, по которым будет осуществляться поиск модуля на сайте npm (если он будет там опубликован);
- author — разработчик;
- license — лицензия, под которой будет распространяться приложение.
Пример, как может выглядеть package.json .
Если вы не планируете публиковать свое приложение в общем репозитории npm, то заполнять все поля совсем не обязательно. Вполне будет достаточно для собственного удобства указать name , version и description .
Управление модулями npm¶
Модули — это приложения, которые реализовывают некоторый функционал и могут быть использованы для разработки более сложных приложений. Например, фреймворк Express является устанавливаемым модулем. Рассмотрим установку пакета на примере Express. Из корневой директории проекта необходимо выполнить команду.
Все модули устанавливаются в директорию node_modules той директории, откуда была вызвана команда npm install .
Флаг —save указывает на то, что мы хотим внести данный модуль в список зависимостей в файл package.json . И когда возникнет необходимость запустить приложение в другой среде, то совсем не обязательно также переносить и папку node_modules . Перенесите только файл package.json и выполните в командной строке.
И все указанные в package.json Node.js npm модули будут установлены в папку node_modules .
Если при установке пакета вы не хотите, чтобы он добавлялся в список зависимостей, то просто не указывайте флаг —save .
После установки модуля с —save в package.json появится объект dependencies со списком зависимостей вашего проекта.
Для задания установки определенной версии или версии из какого-либо диапазона, используйте оператор @ .
При указании диапазона версий задаваемое значение должно быть заключено в двойные кавычки.
Установка самой последней версии модуля может быть выполнена так.
В процессе разработки, например для тестирования или измерения показателей производительности, вам могут понадобиться Node.js npm модули, которые не будут использоваться и даже не должны устанавливаться в среде production . Чтобы установить npm модуль только для среды разработки, укажите флаг —save-dev .
Теперь в package.json должен появиться новый блок devDependencies .
Теперь рассмотрим глобальную установку пакетов. Допустим, на вашем сервере одновременно работают несколько разных Node.js приложений, но которые имеют общие зависимости. Чтобы не дублировать пакет в директории каждого проекта, вы можете установить его в вашу систему глобально с помощью флага -g и он будет доступен для использования во всей системе.
С течением времени Node.js npm модули дорабатываются и улучшаются, а следовательно выходят их новые версии. Чтобы обновить все пакеты, описанные в package.json , используйте такую команду.
Обновление конкретного модуля, например Express, выглядит так.
Для удаления пакет из зависимостей вашего проекта, используйте uninstall .
Использование NPM
В этой главе вы узнаете, что такое NPM и как его использовать. Давайте приступим к изучению!
NPM в двух словах
NPM — это менеджер пакетов, используемый Node.js-приложениями. В нём вы можете найти массу готовых модулей, поэтому вам не нужно изобретать колесо. Это похоже на Maven для Java или Composer для PHP. Существует два основных интерфейса, с которыми вы будете взаимодействовать: сайт NPM и набор инструментов командной строки (CLI).
И веб-сайт, и CLI используют один и тот же реестр, чтобы искать и отображать модули.
Вебсайт
Сайт NPM можно найти по адресу https://npmjs.com. Здесь вы можете зарегистрироваться как новый пользователь или поискать нужные пакеты.
Интерфейс командной строки
Чтобы запустить CLI, достаточно написать:
Обратите внимание, что NPM поставляется вместе с бинарным файлом Node.js, поэтому вам не нужно его устанавливать, однако если вы хотите использовать определенную версию NPM, вы можете его обновить. Если вы хотите установить NPM версии 3, вы можете сделать это с помощью: npm install npm@3 -g .
Использование NPM: Учебное пособие
Вы уже встречались с NPM в предыдущей главе, когда создавали файл package.json . Давайте расширим наши знания!
Добавление зависимостей
В этом разделе вы узнаете, как добавлять рантайм зависимости к вашему приложению.
Когда у вас есть файл package.json , вы можете добавить зависимости к вашему приложению. Давайте добавим одну! Попробуйте следующее:
С помощью этой единственной команды мы достигли двух вещей: во-первых, lodash загружен и помещён в папку node_modules . Это папка, в которой будут находиться все ваши внешние зависимости. Обычно вы не хотите добавлять её в свою систему управления версиями, поэтому, если вы используете git, обязательно добавьте node_modules в файл .gitignore .
Это может быть хорошей отправной точкой для вашего .gitignore (ссылка на GitHub).
Давайте посмотрим, что происходит в файле package.json ! Появилось новое свойство, называемое dependencies :
Это означает, что lodash версии 4.6.1 теперь установлен и готов к использованию. Обратите внимание, что NPM следует правилам SemVer для версионирования пакетов.
Используя нумерацию версий вида MAJOR.MINOR.PATCH, повышайте MAJOR-версию, когда вы делаете несовместимые изменения API, MINOR-версию, когда вы добавляете функциональность обратно-совместимым образом, и PATCH-версию, когда вы делаете исправления ошибок с обратной совместимостью. Для получения дополнительной информации: http://semver.org/
Поскольку lodash готов к использованию, давайте посмотрим, как мы можем им воспользоваться! Вы можете сделать это так же, как и с вашим собственным модулем, но теперь вам не нужно указывать полный путь, достаточно только имени модуля:
Добавление зависимостей для разработки
В этом разделе вы узнаете, как добавлять зависимости, необходимые только во время сборки приложения.
Когда вы собираете веб-приложения, вам может потребоваться минимизировать ваши JavaScript-файлы, объединить CSS-файлы и так далее. Модули, которые это сделают, будут выполняться только во время создания ресурсов, поэтому работающее приложение не нуждается в них.
Вы можете установить такие скрипты с помощью:
После этого в вашем файле package.json появится новый раздел, называемый devDependencies . Все модули, которые вы устанавливаете с помощью —save-dev , будут описаны там, а также они будут помещены в тот же самый каталог node_modules .
NPM-скрипты
NPM-скрипты — очень мощная концепция, с их помощью вы можете создавать небольшие утилиты или даже описывать сложные системы сборки.
Наиболее распространенными являются скрипты start и test . С помощью start вы можете описать, как нужно запускать приложение, а test используется для запуска тестов. В вашем package.json они могут выглядеть примерно так:
Что следует здесь отметить:
- start : просто описывает начальную точку для запуска вашего приложения, этот скрипт можно вызвать с помощью npm start .
- test : цель этого скрипта заключается в том, чтобы запускать ваши тесты: одно из удобств такого запуска тестов заключается в том, что в этом случае mocha не нужно устанавливать глобально, так как NPM будет искать её в папке node_modules/.bin , а mocha будет размещена там же. Запуск тестов может быть вызван с помощью npm test .
- your-custom-script : всё, что вы захотите (вы можете выбрать любое имя). Его можно вызвать с помощью npm run your-custom-script — не забывайте про run в этом случае!
Ограничение области видимости и приватные пакеты
Первоначально у NPM было глобальное пространство имен для названий модулей, и с более чем 250 000 модулями в реестре большинство простых имен уже заняты. Кроме того, глобальное пространство имен содержит только общедоступные модули.
В NPM урегулировали эту проблему внедрением пакетов с ограниченной областью видимости (scoped packages), они имеют следующий шаблон именования:
Вы можете устанавливать пакеты с ограниченной областью видимости так же, как и раньше:
Они будут отображаться в вашем package.json следующим образом:
Подключения пакетов с ограниченной областью видимости работает должным образом:
Менеджер зависимостей NPM
Дмитрий Фитискин Нетология

Дмитрий Фитискин
руководитель направления «Программирование»
Пример использования сторонних библиотек
Задача
Получить курс валют и вывести в консоль курс Евро и Доллара США.
Простое решение
Решение с использованием модуля request
Но модуля request нет в ядре Node.js. Это сторонний модуль. Как нам его получить?
Установка request
Шаг 1: выполним команду в консоли:
Шаг 2: наше приложение готово к запуску:
Как мне кажется, польза и мощь пакетов очевидна.
Менеджер пакетов NPM

Система управления пакетами — набор программного обеспечения, позволяющего управлять процессом установки, удаления, настройки и обновления различных компонентов программного обеспечения. Системы управления пакетами активно используются в различных дистрибутивах операционной системы Linux и других UNIX-подобных операционных системах.
Зачем нужен менеджер пакетов?
- Позволяет использовать в вашем проекте различные библиотеки и плагины (зависимости)
- Позволяет легко устанавливать, обновлять, удалять зависимости
- Позволяет легко понять, какие зависимости используются в вашем проекте
- Позволяют автоматизировать рутинные задачи
Что умеет NPM?
- Поиск пакетов
- Просмотр информации о пакете
- Установка пакетов
- Удаление установленных пакетов
- Создание и публикация нового пакета
Команды NPM
Поиск пакетов в NPM
Также можно искать пакеты на npmjs.com
Просмотр информации о пакете
Команда show . Показывает информацию в JSON формате:
Установка пакетов
Есть несколько вариантов установки:
- Простая установка пакета
- Глобальная установка пакета в систему
- Установка пакета в качестве зависимости для вашего приложения
Простая установка пакета
Команда install или сокращенный вариант i
После этого в текущей директории появится новая директория node_modules , а в ней директория nodemon .
При установке пакетов в директории node_modules могут появляться не только директории установленных вами пакетов, но и их зависимостей. В случае nodemon в node_modules появится также директория chokidar , minimatch , undefsafe и другие.
Глобальная установка пакета
При этом пакет nodemon будет установлен не в текущую директорию, а в директорию для глобально установленных пакетов. Она одна для пользователя в системе.
Устанавливайте глобально только те пакеты, которые специально для этого созданы. Как правило, глобально устанавливаются пакеты, предоставляющие исполняемый файл (приложение для командной строки, например nodemon ).
Установка пакета в качестве зависимости
Установка с флагом —save или -S :
Для установки пакетов, которые необходимы только при разработке проекта, и не актуальны при использовании, можно подключить как зависимость для разработки с флагом —save-dev или -D :
Установка всех зависимостей
Команда install без дополнительных параметров устанавливает все зависимости:
Зависимости прописываются в файле package.json , который мы изучим далее.
Обновление ранее установленных зависимостей
Команда update позволяет установить более новые версии тех пакетов, которые прописаны как зависимости.
Обновление происходит с учетом ограничения по версиям, заданным в package.json .
Удаление установленных пакетов
Команда uninstall удаляет ранее установленный пакет:
Для того, чтобы удалить пакет и из зависимостей тоже, используйте ключи —save или —save-dev :
Описание проекта в package.json
Ошибка при установке пакета в качестве зависимости
Что такое package.json и для чего он нужен?
package.json
Если коротко, то package.json — это JSON-файл с «аннотацией» вашего проекта (название, версия, зависимости и многое другое). Его можно создать вручную или же воспользоваться командой:
Название проекта name
Уникальное имя вашего проекта, записанное в нижнем регистре. Это свойство — обязательное.
Это же свойство задаёт имя проекта в публичном каталоге, когда проект будет опубликован.
Версия проекта version
Записывается в формате MAJOR.MINOR.PATCH, части которого увеличиваются, когда в проекте появились изменения:
- MAJOR — не имеющие обратной совместимости с предыдущими версиями.
- MINOR — изменения с обратной совместимостью или новые функции.
- PATCH — обратно-совместимые исправления ошибок.
Основной файл проекта main
То, что вы обычно запускаете node server/app.js . Основная точка входа:
Подключив пакет require(‘my-cool-package’) , мы получим именно этот файл. Рекомендуется не делать побочных действий (например, запуск веб-сервера). Также, если в папке проекта запускать node . , то запустится именно этот файл.
Автор проекта author
Ваше имя и контактные данные:
NPM скрипты
Что такое npm-скрипт
Одним из параметров в файле package.json является параметр scripts . Этот параметр описывает команды, которые доступны при использовании вашего пакета.
Частью ядра NPM является команда npm run-script (или npm run ). Эта команда позволяет вызвать команды из scripts , прописанные в файле package.json .
Получаем список скриптов
Команда run без параметров выведет все доступные скрипты, описанные в package.json
Запускаем скрипт
Указав после команды run название скрипта из package.json :
Создадим свой скрипт
Добавим в файл package.json следующий фрагмент:
И вызовем наш новый скрипт hw :
Глобальная установка пакетов
- Некоторые пакеты предоставляют консольные утилиты для использования (например, nodemon ).
- Чтобы использовать эти утилиты в командной строке, необходимо установить эти пакеты глобально (с флагом -g ).
- Если же вы планируете их использовать как npm-скрипты, то глобальная установка не требуется.
Вызов npm скрипта из другого скрипта
Так как в качестве скрипта мы можем вызвать любую команду, доступную в консоли, то мы можем вызывать одни скрипты из других:
if0rest / npm.md
Флаг —save-dev или -D позволяет установить пакет и добавить запись о нём в раздел, содержащий перечень зависимостей разработки (то есть — пакетов, которые нужны в ходе разработки проекта, вроде библиотек для тестирования, но не требуются для его работы) файла package.json, который называется devDependencies.
- dependencies — содержит список npm-пакетов, от которых зависит приложение.
- devDependencies — содержит список npm-пакетов, используемых при разработке проекта, но не при его реальной работе.
Ключ -g говорит о том, что пакет установится в систему глобально, то-есть в систему, а не в папку проекта.
Файл package.json является файлом манифеста нашего проекта, который описывает помимо той информации, что мы внесли в терминале, еще и информацию об используемых пакетах в нашем проекте.
Например, если мы установим в проект Gulp с ключом —save-dev, то пакет и используемая версия автоматически добавится в наш package.json. Такой учет позволит быстро разворачивать новый проект с использованием уже имеющегося package.json и устанавливать необходимые модули с зависимостями, которые прописаны в package.json в новых проектах.
Получив эту команду, npm проверит все пакеты на наличие их новых версий, и, если найдёт их новые версии, соответствующие ограничениям на версии пакетов, заданным в package.json, установит их.
Даже если, следуя правилам семантического версионирования, минорные релизы и патч-релизы не должны содержать в себе изменений, препятствующих обратной совместимости, все мы знаем, что ошибки способны проникать (и проникают) куда угодно.
ВЫЯСНЕНИЕ ВЕРСИЙ УСТАНОВЛЕННЫХ NPM-ПАКЕТОВ
Узнать версии всех установленных в папке проекта npm-пакетов, включая их зависимости:
То же самое можно узнать и просмотрев файл package-lock.json проекта, но древовидную структуру, которую выводит вышеописанная команда, удобнее просматривать.
Вывести только сведения о локальных пакетах верхнего уровня (которые устанавливали самостоятельно и которые перечислены в package.json):
npm list —depth=0
Узнать версию конкретного пакета:
npm list cowsay
Узнать номер самой свежей версии некоего пакета, доступного в npm-репозитории:
npm view <package> version
Узнать, какие версии некоего пакета имеются в npm:
npm view <package> versions
Узнать, вышли ли новые версии используемых пакетов:
УСТАНОВКА СТАРЫХ ВЕРСИЙ NPM-ПАКЕТОВ
Установить нужную версию пакета из npm можно, воспользовавшись следующей конструкцией:
npm install <package>@<version>
Указывать версии можно и устанавливая глобальные пакеты:
npm install -g webpack@4.16.4
Когда вы устанавливаете пакет командой вида npm install <packagename> , из репозитория загружается самая свежая из доступных версий и помещается в папку node_modules. При этом соответствующие записи добавляются в файлы package.json и package-lock.json, находящиеся в папке проекта.
Правило обновления пакета в виде ^1.3.1 означает, что npm может обновлять пакет при выходе его минорных и патч-версий.
АНАЛИЗ УСТАРЕВШИХ ЗАВИСИМОСТЕЙ ПРОЕКТА
Некоторые из доступных обновлений пакетов представляют собой их мажорные релизы, обновления до которых не произойдёт при выполнении команды npm update. Обновление до мажорных релизов этой командой не производится, так как они (по определению) могут содержать серьёзные изменения, не отличающиеся обратной совместимостью с предыдущими мажорными релизами. Для того чтобы обновиться до новых мажорных версий всех используемых пакетов, глобально установите пакет npm-check-updates :
npm install -g npm-check-updates
Затем запустите утилиту, предоставляемую им:
Эта команда обновит файл package.json, внеся изменения в указания о подходящих версиях пакетов в разделы dependencies и devDependencies. Это позволит npm обновить пакеты, используемые в проекте, до новых мажорных версий после запуска команды npm update . Если вы хотите установить самые свежие версии пакетов для только что только что загруженного проекта, в котором пока нет папки node_modules, то, вместо npm update , выполните команду npm install .
КАКОЙ СПОСОБ УСТАНОВКИ ПАКЕТОВ ЛУЧШЕ ИСПОЛЬЗОВАТЬ: ЛОКАЛЬНЫЙ ИЛИ ГЛОБАЛЬНЫЙ?
В общем случае, все пакеты следует устанавливать локально. Благодаря этому, даже если у вас имеются десятки nodejs-проектов, можно обеспечить, при необходимости, использование ими различных версий одних и тех же пакетов. Обновление глобального пакета приводит к тому, что все проекты, в которых он применяется, будут использовать его новый релиз. Несложно понять, что это, в плане поддержки проектов, может привести к настоящему кошмару, так как новые релизы некоторых пакетов могут оказаться несовместимыми с их старыми версиями.
Пакеты следует устанавливать глобально, когда они представляют собой некие утилиты, вызываемые из командной строки, которые используются во множестве проектов. Подобные пакеты можно устанавливать и локально, запуская предоставляемые ими утилиты командной строки с использованием npx, но некоторые пакеты, всё же, лучше устанавливать глобально. Например, следующие:
- npm
- create-react-app
- vue-cli
- grunt-cli
- mocha
- react-native-cli
- gatsby-cli
- forever
- nodemon
Не исключено, что в вашей системе уже имеются пакеты, установленные глобально. Для того чтобы об этом узнать, воспользуйтесь следующей командой:
npm list -g —depth 0
О ЗАВИСИМОСТЯХ ПРОЕКТОВ
Когда пакет следует рассматривать как обычную зависимость проекта, необходимую для обеспечения его функционирования, а когда — как зависимость разработки?
При установке пакета с помощью команды вида npm install <package-name> он устанавливается как обычная зависимость. Запись о таком пакете делается в разделе dependencies файла package.json. Использование флага —save-dev позволяет установить пакет как зависимость разработки. Запись о нём при этом делается в разделе devDependencies файла package.json. Зависимости разработки — это пакеты, которые нужны в процессе разработки проекта, в ходе его обычного функционирования они не требуются. К таким пакетам относятся, например инструменты тестирования, Webpack, Babel. Когда проект разворачивают, используя команду npm install в его папке, в которой имеется папка, содержащая файл package.json, это приведёт к установке всех зависимостей, так как npm предполагает, что подобная установка выполняется для целей работы над проектом. Поэтому, если пакет требуется развернуть в продакшне, то, при его развёртывании, нужно использовать команду npm install —production Благодаря флагу —production зависимости разработки устанавливаться не будут.
Сейчас мы поговорим об одной весьма мощной команде, npx , которая появилась в npm 5.2. Одной из её возможностей является запуск исполняемых файлов, входящих в состав npm-пакетов. Мы уже рассматривали использование npx для запуска подобного файла из пакета cowsay. Теперь поговорим об этом подробнее.