Что Такое npm? Общее Руководство для Начинающих
npm – это менеджер пакетов, который входит в состав Node.js. В течение многих лет Node широко использовался разработчиками JavaScript для обмена инструментами, установки различных модулей и управления их зависимостями. Вот почему людям, работающим с Node.js, очень важно понять, что такое npm.
Нужен недорогой, но надёжный хостинг для вашего нового проекта? Обратите внимание, что в Hostinger действуют скидки на все тарифы хостинга. Воспользуйтесь предложением и разместите сайт до 90% дешевле!
Как Работает npm?
Он работает, выполняя одну из своих двух ролей:
- Это широко используемый репозиторий для публикации проектов Node.js с открытым исходным кодом. Это означает, что это онлайн-платформа, где каждый может публиковать и делиться инструментами, написанными на JavaScript.
- npm – это инструмент командной строки, который помогает взаимодействовать с онлайн-платформами, такими как браузеры и серверы. Эта утилита помогает в установке и удалении пакетов, управлении версиями и зависимостями, необходимыми для запуска проекта.
Чтобы использовать npm, нужно сначала установить node.js , так как они связаны.

Утилита командной строки npm обеспечивает корректную работу node.js.
Чтобы использовать пакеты, ваш проект должен содержать файл с именем package.json . Внутри этого пакета вы найдёте метаданные, касающиеся проектов.
Метаданные показывают несколько аспектов проекта в следующем порядке:
- Название проекта
- Первоначальная версия
- Описание
- Точка входа
- Тестовые команды
- Репозиторий Git
- Ключевые слова
- Лицензия
- Зависимости
- DevDependencies
Метаданные помогают идентифицировать проект и служат основным источником информации о проекте.
Вот пример того, как вы можете идентифицировать проект по его метаданным:
< "name": "hostinger-npm", "version": "1.0.0", "description": "npm guide for beginner", "main": "beginner-npm.js", "scripts": < "test": "echo \"Error: no test specified\" && exit 1" >, "keywords": [ "npm", "example", "basic" ], "author": "Hostinger International", "license": "MIT", "dependencies": < "express": "^4.16.4" >>
- Имя: hostinger-npm
- Версия: 1.0.0
- Это руководство по npm для начинающих
- Точка входа в проект или основной файл: beginner-npm.js
- Ключевые слова или теги для поиска проекта в репозитории: npm, example и basic
- Автор проекта: Hostinger International .
- Этот проект лицензирован в рамках MIT
- Зависимости или другие модули, которые использует этот модуль – express 4.16.4
Как Установить Модули npm и Запустить Проекты?
Убедитесь, что node.js и npm установлены, выполнив несколько простых команд.
Чтобы посмотреть, установлен ли node.js, откройте Терминал или инструмент командной строки и введите node -v . Если пакет node.js уже установлен, вы должны увидеть номер версии:
$ node -v v0.10.9
Чтобы узнать, установлен ли npm, введите npm -v. Опять же таки, вы должны увидеть номер версии:
$ npm -v 1.2.25
Если он не установлен, скачайте Node с сайта node.js и следуйте инструкциям установщика.
npm известен своим однострочным установщиком:
$ curl https://npmjs.org/install.sh | sh
Так как новые версии npm выходят регулярно, позже вы сможете обновить его. Чтобы обновить npm, просто скачайте установщик с сайта node.js и запустите его снова. Последняя версия автоматически заменит версию на вашем компьютере.
Также вы можете обновить его с помощью этой команды:
$ npm update -g npm
Инициализация Проекта с npm
Если у вас уже есть Node и npm, и вы хотите приступить к разработке, выполните команду npm init . Это запустит инициализацию вашего проекта.
Например, давайте создадим каталог с именем test-npm и cd в него. Теперь давайте запустим нашу первую команду npm:
$ npm init
Эта команда служит инструментом для создания файла package.json проекта. После выполнения шагов npm init , файл package.json будет сгенерирован автоматически и помещён в текущий каталог.
Полезной функцией является то, запуск инициализации менеджера пакетов Node сопровождается объяснениями:
mymacs-MacBook-Pro: test-npm mymac$ npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sane defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (test-npm)
Ответьте на подсказки npm init .
name: (test-npm)hostinger-npm version: (1.0.0)1.0.0 description: npm guide for beginner entry point: (index.js) beginner-npm.js test command: git repository: keywords: npm, example, beginner author: Hostinger Internationallicense: (ISC) MIT
Нажмите “ Enter ”, чтобы принять их. Затем npm init даст вам возможность предварительно просмотреть package.json , который будет создан.
Это выглядит следующим образом:
< "name": "hostinger-npm", "version": "1.0.0", "description": "npm guide for beginner", "main": "beginner-npm.js", "scripts": < "test": "echo \"Error: no test specified\" && exit 1" >, "keywords": [ "npm", "example", "basic" ], "author": "Hostinger International", "license": "MIT", "dependencies": < "express": "^4.16.4" >> Is this OK? (yes) yes mymac-MacBook-Pro: test-npm mymac$
Введите “ yes ” и нажмите “ Enter ”, чтобы сохранить package.json . Вы всегда можете изменить его позже, либо отредактировав файл напрямую, либо снова запустив npm init .
Установка Модулей npm
Пакет в node.js содержит все файлы, необходимые для модуля. Модули – это библиотеки JavaScript, которые вы можете включить в свой проект.
Установка модулей – одна из самых важных вещей, которую вы должны научиться делать, начиная работу с менеджером пакетов Node. Вот команда для установки модуля в текущий каталог:
$ npm install $ npm i
В приведенной выше команде замените на имя модуля, который вы хотите установить.
Например, если вы хотите установить Express – наиболее используемый и наиболее известный фреймворк node.js, вы можете выполнить следующую команду:
$ npm install express
[mymac-MacBook-Pro:test-npm mymac$ npm install express] npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN hostinger-npm@1.0.0 No repository field. + express@4.16.4 added 48 packages from 36 contributors and audited 121 packages in 2.798s found 0 vulnerabilities mymac-MacBook-Pro: test npm mymac$
Приведённая выше команда установит модуль Express в /node_modules в текущий каталог.
Каждый раз, когда вы устанавливаете модуль из npm, он будет установлен в папку node_modules .
Вот как это выглядит после установки модуля в ваш проект:
[mymac-MacBook-Pro:test-npm mymac$ npm install express] npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN hostinger-npm@1.0.0 No repository field. + express@4.16.4 added 48 packages from 36 contributors and audited 121 packages in 2.798s found 0 vulnerabilities mymac-MacBook-Pro: test npm mymac$
Выводы
Разбираясь с вопросом, что такое npm, вы наверняка заметили, что помимо своей основной функции – функции онлайн-базы данных для различных пакетов node.js – ещё одной целью менеджера пакетов Node (npm) являются автоматические зависимости и управление файлами package.json , благодаря его интерфейсу командной строки.
Вот список основных команд, которые следует знать, если вы хотите не только разбираться в том, что такое npm, но и работать с ним:
$ curl https://npmjs.org/install.sh | sh
$ npm -v
$ npm init
$ npm install $ npm i
Если вы планируете работать с JavaScript, npm – незаменимый инструмент в вашем рабочем процессе.
Ольга вже близько восьми років працює менеджером у сфері IT, три з яких вона займається SEO. Написання технічних завдань та інструкцій — один з її основних обов’язків. Її хобі — дізнаватися щось нове і створювати цікаві та корисні статті про сучасні технології, веброзробку, мови програмування, пошукову оптимізацію сайтів та багато іншого.
Что такое npm? Руководство по Node Package Manager для начинающих
![]()
Эта статья послужит хорошим руководством по вашему любимому верному спутнику Node.js – npm .
Node.js штурмует мир с 2009 года. Сотни тысяч систем были построены с помощью Node.js, что побудило сообщество разработчиков заявить, что «JavaScript поглощает программное обеспечение».
Одним из составляющий успеха Node стал npm – его популярный диспетчер пакетов, который позволяет разработчикам JavaScript быстро и легко обмениваться полезными пакетами, такими как lodash и moment .
На момент написания этой статьи npm поспособствовал публикации более 1,3 миллионов пакетов с еженедельной загрузкой более 16 миллиардов! Эти цифры являются фантастическими для любого программного инструмента. Итак, а теперь давайте поговорим о том, что же такое npm .
Что такое NPM?
NPM, или Node Package Manager, — это диспетчер пакетов для среды выполнения JavaScript Node.js.
Он также известен как “Ninja Pumpkin Mutants», «Nonprofit Pizza Makers», а также множество других случайных имен, с которыми вы можете поэкспериментировать и, возможно, внести свой вклад в расширения npm.
NPM состоит из двух основных частей:
- инструмент CLI (command-line interface – интерфейс командной строки) для публикации и загрузки пакетов
- онлайн-репозиторий, в котором размещаются пакеты JavaScript.
Для более наглядного представления можно представить, что репозиторий npmjs.com – это распределительный центр, который получает пакеты товаров от продавцов (авторов пакетов npm ) и распространяет их среди покупателей (пользователей пакетов npm ).
Для того, чтобы облегчить данный процесс, в распределительном центре npmjs.com работает армия трудолюбивых вомбатов (CLI), которые назначаются в качестве личных помощников для каждого отдельного клиента npmjs.com. таким образом, пакеты доставляются разработчикам JavaScript следующим образом:
А процесс публикации пакеты для ваших коллег по JavaScript выглядит примерно так:
Ну и да, вомбаты не настоящие, если что, а для наглядности 🙂
Давайте посмотрим, как же эта армия вомбатов помогает разработчикам, которые хотят использовать пакеты JavaScript в своих проектах. Мы также будем наблюдать то, как они помогают мастерам по открытом исходному коду выпускать свои потрясающие библиотеки в свет.
package.json
Каждый проект в JavaScript – будь то Node.js или приложение браузера – может рассматриваться как пакет npm с собственной информацией о пакете и функциями package.json для описания проекта.
Можно представить, что package.json – это этикетки на коробках с npm , которые доставляет ваша армия вомбатов.
package.json создается при запуске npm init для инициализации проекта JavaScript/Node.js со следующими основными метаданными, предоставленными разработчиками:
- name : имя вашей библиотеки/проекта JavaScript.
- version : версия вашего проекта. Часто при разработке приложений этим полем пренебрегают, так как нет очевидной необходимости в управлении версиями библиотек с открытым исходным кодом. Но тем не менее, эта информация может пригодиться в качестве источника версии развертывания.
- description : описание проекта.
- license : лицензия на проект.
npm-скрипты
package.json также поддерживает scripts (скрипты), которые можно определить для запуска инструментов командной строки, установленных в локальном контексте проекта. Например, скрипты проекта npm могут выглядеть примерно так:
При этом eslint , prettier , ncc , jest не обязательно должны быть установлены как глобальные исполняемые файлы, а скорее даже как локальные для вашего проекта внутри node_modules/.bin/ .
Недавнее введение npx позволяет запускать эти команды в области видимости проекта node_modules точно так же, как глобально установленную программу, просто добавив префикс npx . (то есть npx prettier —write **/*.ts ).
dependencies VS devDependencies
Эти двое представляют собой объекты типа «ключ-значение», где ключ – это имена библиотек npm , а значение – это их версии в семантическом формате. Ниже представлен пример шаблона действия TypeScript на GitHub:
< "dependencies": < "@actions/core": "^1.2.3", "@actions/github": "^2.1.1" >, "devDependencies": < "@types/jest": "^25.1.4", "@types/node": "^13.9.0", "@typescript-eslint/parser": "^2.22.0", "@zeit/ncc": "^0.21.1", "eslint": "^6.8.0", "eslint-plugin-github": "^3.4.1", "eslint-plugin-jest": "^23.8.2", "jest": "^25.1.0", "jest-circus": "^25.1.0", "js-yaml": "^3.13.1", "prettier": "^1.19.1", "ts-jest": "^25.2.1", "typescript": "^3.8.3" >>
Эти пакеты, от которых зависит приложение, (dependencies) устанавливаются с помощью команды npm install с флагами —save и —save-dev . Они предназначены для использования в эксплуатационной среде и среде разработки/тестирования соответственно. В следующем разделе мы рассмотрим подробнее, как установить эти пакеты.
Между тем, важно понимать, что означают знаки, которые могут стоять перед семантической версией (при условии, что вы ознакомились с моделью semver major.minor.patch ):
- ^ : последний второстепенный выпуск. Например, спецификация ^1.0.4 может установить версию 1.3.0 , если это последняя дополнительная версия основной серии 1 .
- ~ : последний выпуск исправления. Аналогично ^ для второстепенных выпусков – спецификация ~1.0.4 может установить версию 1.0.7 , если это последняя второстепенная версия во второстепенной серии 1.0 .
Все точные версии пакетов будут задокументированы в созданном файле package-lock.json .
package-lock.json
Этот файл описывает точные версии пакетов, используемых в проекте JavaScript npm. Если package.json — это общая описательная этикетка, то package-lock.json — это список ингредиентов.
И точно так же, как мы обычно не читаем список ингредиентов продукта (если только вам совсем нечем себя занять или вам действительно нужно знать состав), так и package-lock.json не предназначен для того, чтобы разработчики читали его построчно (если только вы отчаянно не пытаетесь решить проблемы из области «как это работает»).
package-lock.json обычно создается с помощью команды npm install , а также считывается нашим инструментом NPM CLI, чтобы обеспечить воспроизведение сред сборки для проекта в помощью npm ci .
Как эффективно управлять NPM в качестве «покупателя»
Учитывая тот факт, что было опубликовано 1,3 миллиона пакетов, а загрузок было 16 миллиардов, можно сделать вывод, что большинство пользователей npm используют его именно для загрузки пакетов. Поэтому стоит знать, как пользоваться этим мощным инструментом.
npm install
Это наиболее часто используемая команда при разработке приложений JavaScript/Node.js.
По умолчанию команда npm install устанавливает последнюю версию пакета со знаком версии ^ . Команда npm install в контексте проекта npm загружает пакеты в папку node_modules проекта в соответствии со спецификациями package.json , обновляя версию пакета (и, в свою очередь, повторно создавая package-lock.json ) везде, где это возможно, основываясь на соответствиях версии ^ и ~ .
Вы можете указать глобальный флаг -g , если хотите установить пакет в глобальном контексте – вы сможете использовать его в любом месте на вашем компьютере (это обычно используется для пакетов инструментов командной строки, таких как like-server).
npm делает установку пакетов JavaScript настолько простой, что эту команду часто используют неправильно. Это приводит к тому, что npm становится предметом огромного количества шуток со стороны программистов, таких как эти:
Здесь на помощь приходит флаг —production ! В предыдущем разделе мы обсудили dependencies и devDependencies, предназначенные для использования в эксплуатационной среде и среде разработки/тестирования соответственно. Этот флаг определяет то, как создаются отличительные признаки в node_modules .
Добавив этот флаг к команде npm install , мы сможем устанавливать пакеты только из dependencies, тем самым резко уменьшая размер наших модулей node_modules до необходимого для запуска и работы наших приложений.
npm ci
Итак, если команда npm install —production оптимальна для эксплуатационной среды, то существует ли команда, которая будет оптимальная для моей локальной разработки и настройки тестирования?
Точно так же, как если package-lock.json еще не существует в проекте, то он генерируется всякий раз при вызове команды npm install , npm ci использует этот файл для загрузки точной версии каждого отдельного пакета, от которого зависит проект.
Именно так мы можем убедиться в том, что контекст нашего проекта остается одинаковым на любом оборудовании, будь то наши ноутбуки, которые мы используем для разработки, или среды сборки CI (Continuous Integration – непрерывная интеграция), такие как Github Actions.
npm audit
Из-за огромного количества пакетов, которые были опубликованы и могут быть легко установлены, пакеты npm уязвимы из-за недобросовестных авторов с недобрыми намерениями.
Понимая, что в экосистеме возникла проблема, организация npm.js предложила ввести команду npm audit . Она поддерживает список брешей в системе безопасности, с помощью которых разработчики могут проверять свои пакеты с помощью этой команды.
npm audit предоставляет разработчикам информацию об уязвимостях и о том, существуют ли версии с исправлениями для обновления. Например:
Если исправления доступны в следующих некритических обновлениях версии, то команду npm audit fix можно использовать для автоматического обновления версий затронутых пакетов.
Как эффективно управлять NPM в качестве «продавца»
Мы рассмотрели, как использовать инструмент NPM CLI в качестве потребителя, но что насчет его эффективного использования в качестве автора (и, возможно, становления мастером JavaScript по открытому исходному коду?)?
npm publish
Отправить пакет в распределительный центр npmjs.com очень просто – достаточно просто запустить команду npm publish . Сложность заключается в определении версии пакета, но она не относится к авторам пакетов npm .
Практическое правило согласно semver.org:
- ОСНОВНАЯ (MAJOR) версия при внесении несовместимых изменений API;
- ВТОРОСТЕПЕННАЯ (MINOR) версия при добавлении функциональности и сохранении совместимости;
- Версия ИСПРАВЛЕНИЯ (PATCH) при исправлении ошибок и сохранении совместимости с предыдущими версиями.
Это очень важно – следовать приведенному выше правилу при публикации ваших пакетов, чтобы не нарушать чей-либо программный код, так как соответствие версий по умолчанию в npm – ^ (она же следующая второстепенная версия).
Npm save что это
npm — это менеджер пакетов, который управляет модулями и зависимостями проекта. В Node.js npm уже имеется по умолчанию, поэтому его отдельная установка не требуется.
Все пакеты хранятся в облачном репозитории на официальном сайте. Вы также можете создать свой модуль и опубликовать его в репозитории для общего использования.
Прежде, чем начинать разрабатывать собственный модуль, попробуйте поискать его в npm репозитории. Наверняка уже будет существовать готовое решение, которое сэкономит ваше время.
Node.js npm также избавляет разработчика от необходимости хранить все используемые сторонние модули в удаленных репозиториях. За это отвечает файл package.json .
package.json¶
В npm файл package.json используется для описания модулей, от которых зависимо ваше приложение, и содержит ряд метаданных о приложении. Рассмотрим на примере. Предположим, у вас есть проект, корневая директория которого называется app . Перейдите в app через командную строку и введите команду.
npm init
Вам будет предложено ввести некоторые данные, на основе которых Node.js npm сгенерирует файл package.json . Структура файла:
- name — название приложения;
- version — версия;
- description — описание;
- main — главный файл приложения, который отвечает за его запуск (хорошей практикой считается давать название app.js или index.js );
- scripts — объект, описывающий команды, которые часто приходится выполнять в процессе разработки и упрощающий их использование;
- repository — ссылка на Git репозиторий, где хранится проект;
- keywords — массив ключевых слов, по которым будет осуществляться поиск модуля на сайте npm (если он будет там опубликован);
- author — разработчик;
- license — лицензия, под которой будет распространяться приложение.
Пример, как может выглядеть package.json .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
"name": "webdraftt.com", "version": "1.0.0", "description": "My first Node js application", "main": "app.js", "scripts": "build": "webpack" >, "repository": "type": "git", "url": "https://github.com/webdraftt/webfraftt" >, "keywords": [ "angular", "rxjs", "ngrx", "node js", "npm" ], "author": "webdraftt", "license": "ISC" >
Если вы не планируете публиковать свое приложение в общем репозитории npm, то заполнять все поля совсем не обязательно. Вполне будет достаточно для собственного удобства указать name , version и description .
Управление модулями npm¶
Модули — это приложения, которые реализовывают некоторый функционал и могут быть использованы для разработки более сложных приложений. Например, фреймворк Express является устанавливаемым модулем. Рассмотрим установку пакета на примере Express. Из корневой директории проекта необходимо выполнить команду.
npm install --save express
Все модули устанавливаются в директорию node_modules той директории, откуда была вызвана команда npm install .
Флаг —save указывает на то, что мы хотим внести данный модуль в список зависимостей в файл package.json . И когда возникнет необходимость запустить приложение в другой среде, то совсем не обязательно также переносить и папку node_modules . Перенесите только файл package.json и выполните в командной строке.
npm install
И все указанные в package.json Node.js npm модули будут установлены в папку node_modules .
Если при установке пакета вы не хотите, чтобы он добавлялся в список зависимостей, то просто не указывайте флаг —save .
npm install express
После установки модуля с —save в package.json появится объект dependencies со списком зависимостей вашего проекта.
1 2 3 4 5
"dependencies": "express": ">= 1.2.0" > >
Для задания установки определенной версии или версии из какого-либо диапазона, используйте оператор @ .
npm install expre[email protected] npm install express@">4.15.0
При указании диапазона версий задаваемое значение должно быть заключено в двойные кавычки.
Установка самой последней версии модуля может быть выполнена так.
npm install express@latest
В процессе разработки, например для тестирования или измерения показателей производительности, вам могут понадобиться Node.js npm модули, которые не будут использоваться и даже не должны устанавливаться в среде production . Чтобы установить npm модуль только для среды разработки, укажите флаг --save-dev .
npm install logger-service --save-dev
Теперь в package.json должен появиться новый блок devDependencies .
1 2 3 4 5 6 7 8
"dependencies": "express": ">= 1.2.0" >, "devDependencies": "logger-service": ">= 1.0.2" > >
Теперь рассмотрим глобальную установку пакетов. Допустим, на вашем сервере одновременно работают несколько разных Node.js приложений, но которые имеют общие зависимости. Чтобы не дублировать пакет в директории каждого проекта, вы можете установить его в вашу систему глобально с помощью флага -g и он будет доступен для использования во всей системе.
npm install express -g
С течением времени Node.js npm модули дорабатываются и улучшаются, а следовательно выходят их новые версии. Чтобы обновить все пакеты, описанные в package.json , используйте такую команду.
npm update
Обновление конкретного модуля, например Express, выглядит так.
npm update express
Для удаления пакет из зависимостей вашего проекта, используйте uninstall .
npm uninstall express
Если вы хотите также удалить его из package.json , просто укажите флаг --save .
npm uninstall express --save
package-lock.json¶
Сразу после установки хотя бы одного Node.js npm модуля вы увидите, что рядом с package.json был создан файл package-lock.json , который будет обновляться каждый раз при добавлении новой зависимости.
В package-lock.json содержится описание состояния текущей иерархии используемых в приложении модулей: их точные версии и точные версии используемых ими модулей и так до конца. При развертывании Node.js приложения в новой среде наличие файла package-lock.json гарантирует, что будут установлены версии тех пакетов, которые использовались в разработке в последний раз.
Описание файла package-lock.json имеет более высокий приоритет в сравнении с описанием зависимостей package.json .
Как использовать ключи -save-exact и -save-dev
Вы рекомендовали использовать ключи -DE, в статье просто -D, в документации:
npm install webpack-dev-server --save-dev
Объясните, что делают различные флаги при установке пакетов -D -de -save-dev? Чем они отличаются? Что по факту делает этот флаг? Что будет если его не поставить при установке пакета?
Для обновления пакетов мы используем ключи -DE (их следует писать прописными). Это сокращённая запись.
D — псевдоним для -save-dev . Когда мы используем D , то подразумеваем, что пакет должен быть установлен в devDependencies (зависимости для разработки).
E — псевдоним для -save-exact . С помощью этого параметра фиксируем версию. Если им не воспользоваться, то рядом с версией пакета в package.json появится «крышечка», символ ^ .
Вот и получается, что указание -DE равносильно применению --save-dev и --save-exact . Разницы нет никакой. Просто запись короче и проще запомнить, но это вкусовщина. Каждый делает, как нравится.
Что за символ ^
Если мы установим любой пакет вот так (без фиксации версии):
npm i eslint -D
то в package.json получим что-то вроде этого:
"devDependencies":
Представим, что мы захотели обновить версию пакета. Для этого в npm предусмотрена отдельная команда:
npm update eslint
До какой версии будет обновлён пакет eslint — до самой свежей или нет?
Семантическое версионирование
Чтобы ответить, посмотрим, из чего строится номер версии (например, 7.0.1 ). Для нумерации применяется семантическое версионирование SEMVER. Оно работает так:
Мажорный номер версии — 7. Он меняется в важных случаях — например, когда теряется обратная совместимость с прошлой версией, добавлено или удалено новое API и так далее.
Минорный номер версии — 0. Меняется, когда добавляются новые возможности без потери обратной совместимости.
Патч версия — 1. Изменяется, когда вносятся баг-фиксы или мелкие улучшения, не добавляющие новую функциональность и не влияющие на обратную совместимость.
Дополнительные символы нужны, чтобы задать критерий обновления:
- ^ (крышечка) — совместимость на уровне мажорной-версии. Пакет может быть обновлён до максимально свежей версии в пределах текущей мажорной.
- ~ (тильда) — совместимость на уровне патч-версии. Пакет может быть обновлён до максимально свежей версии в пределах текущей мажорной и минорной версии.
При установке новых пакетов npm по умолчанию для всех пакетов добавляет символ «крышечки», то есть фиксирует совместимость на уровне мажорной версии. Поэтому при обновлении мы можем беспрепятственно получать свежие версии и случайно не перепрыгнуть на следующую мажорную версию, где может измениться API и проект перестанет корректно работать.
Теоретически всё здорово, но при условии, что мы живём в идеальном мире. Не все разработчики придерживаются правил семантического версионирования и запросто может произойти ситуация, когда изменения в пределах мажорной версии могут что-то сломать.
Чтобы не столкнуться с такой ситуацией, мы фиксируем номер версии, то есть в package.json не должно быть дополнительных символов ^ и ~ Для этого мы и применяем параметр --save-exact или его алиас ( -E ).
Другие материалы
- Для чего использовать дженерики в TypeScript
- Автоматизация вёрстки. npm, package.json
- Как искать и выбирать npm-пакеты?
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.