dr.Brain

doctor Brain

мир глазами веб-разработчика

Управление версиями npm

обновляем npm-пакеты, не опасаясь испортить приложение

dr.Brain

время чтения 4 мин.

Photo by Emma Dooms on Unsplash

Семантическое управление версиями - очень важная тема, которую должен отлично понимать каждый разработчик, независимо от того, чем он занимается: Node, React или Angular.

Кроме того, понимание порядка версионирования npm-пакетов, является частым предметом обсуждения при проведении собеседований.

Семантическое управление версиями npm-пакетов объясняет, как управлять зависимостями устанавливаемых npm-пакетов.

Итак, обратимся к основам.

Приступая к созданию нового Nodejs или React проекта, мы запускаем:

npm init -y

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

Обычно файл package.json выглядит как-то так:

{
  "name": "node_app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Видно, что package.json содержит свойство version, значение которого равно 1.0.0 для нового проекта.

Теперь попробуем установить в проект необходимую версию пакета express с помощью команды:

npm install express@4.16.1

Как результат, в файле package.json будет создан раздел зависимостей:

"dependencies": {
  "express": "^4.16.1"
}

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

Файл package-lock.json ни при каких условиях нельзя удалять или редактировать, он обновляется автоматически при установке или удалении пакетов.

Семантическое версионирование

Наверное Вы уже обратили внимание на то, что dependencies в файле package.json является объектом, содержащим пары ключ-значение.

Значение версии - комбинация трех цифр, разделенных точками, которая может иметь такое условное представление: a.b.c:

  1. Первая цифра (a в a.b.c) определяет мажорную версию пакета - это означает, что такая версия содержит значительные модификации кода, способные привести к критическим изменениям API.
  2. Вторая цифра (b в a.b.c) определяет минорную версию, которая содержит незначительные изменения, не приводящие к изменениям API.
  3. Третья цифра (c в a.b.c) определяет версию патча, который обычно содержит исправления ошибок.

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

Внося в пакет значительные изменения, увеличивайте первую цифру версии проекта на единицу. Внося незначительные изменения, увеличивайте на единицу вторую цифру версии проекта. Если Вы вносите только исправления (патчи), увеличивайте на единицу третью цифру версии.

Так же, Вы можете обратить внимание на символ каретки ˆ, в некоторых случаях указываемый перед номером версии проекта.

"express": "^3.16.1"

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

Каретка (ˆ)

ˆ: этот символ означает, что при обновлении пакетов, упомянутых в package.json, с помощью npm update, обновятся только патчи и минорные изменения. Так, если для текущей версии установленного пакета 3.16.1 выйдет новый минорный релиз, он обновится до версии 3.17.1, а если выйдет патч, пакет обновится до последней доступной версии, например, 3.16.3.

Следует запомнить: если перед номером версии пакета стоит знак ˆ, мажорная версия этого пакета никогда не обновится с помощью npm update.

Если, Вы хотите, чтобы обновлялась и мажорная версия, используйте синтаксис:

npm install express@4.16.1

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

npm install express@latest

Тильда (˜)

˜: этот символ озачает, что для пакета разрешено только обновление патча - это последняя цифра версии пакета. Например, 4.16.1 до 4.16.2 или 4.16.3, но не до 4.17.1 или 5.16.1.


Всегда, можно установить только версии, предоставляемые npm-пакетом (в данном случае речь идет о пакете express).

Если Вы перейдете в npm-репозитарий пакета express, Вы увидете все версии этого пакета. На текущий момент таких версий - 263.

Нажав на ссылку с указанием количества версий проекта, Вы перейдете к длинному списку доступных версий.

Некоторые полезные команды

Если вы хотите узнать текущие и последние версии всех пакетов из package.json, используйте команду npm outdated

Чтобы получить список всех пакетов, устанвленных глобально, воспользуйтесь командой npm list -g –depth=0

Чтобы получить информацию о всех уязвимых пакетах в проекте и инструкции по устранению выявленных уязвимостей, используйте команду npm audit. Если вы работаете на Mac’е, возможно, потребуется повысить права пользователя с помощью sudo npm audit.

Эта команда покажет список всех уязвимых пакетов, со ссылками на информацию с описанием уязвимостей, степенью угрозы (low, medium, high) и командами, которые нужно выполнить, для устранения потенциальных проблем.

Для обечпения безопасности своих проектов, Вы должны выполнять npm audit один или два раза в месяц и следовать полученным рекомендациям.


Спасибо за внимание.


По материалам статьи Yogesh Chavan “Semantic versioning in npm”.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.