# Разбираемся с версиями пакетов в node

04:41
poster
В этом видео мы с вами разберемся с версиями пакетов в package.json.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

В этом видео мы с вами разберемся с версиями пакетов в package.json. Кстати, вопросы по версионированию пакетов тоже иногда спрашивают на собеседованиях.

Итак когда мы устанавливаем какой-то пакет, например, express, то в package.json добавляется последняя версия пакета, состоящая из трех цифр. Эти цифры означают Major, Minor, Patch и используют как спецификацию semver.

Что это значит? Когда я делаю пакет и еще не опубликовал его, то первая цифра идет 0. Это значит, что какие бы номера версий не шли дальше, я могу в любом момент менять любой функционал пакета. Потому что пакет, начинающийся с 0 - нестабильный пакет.

Когда мы опубликовали пакет, то каждый номер версии начинает иметь смысл. Последняя цифра - это PATCH. То есть внесение незначительных изменений в пакет, например bugfix.

Средняя цифра - это минорная версия. Она должна обновляться при изменениях, которые добавляют новый функционал, но не ломают то, что уже работает. Таким образом любой человек может обновится с 1.2.0 на 1.3.0 и все должно по прежнему работать.

Первая же цифра - это мажорная версия. Если внеслись хоть какие-то изменения, которые сломали текущий код, то должна релизится новая мажорная версия. Это может быть как изменение API, так и изменение порядка аргументов. Поэтому нужно делать версию 2.0.0.

Собственно вся система версий и пакетов подчиняется спецификации semver, о которой вы можете почитать на сайте semver.org.

Теперь немного о дополнительных символах при версии пакета.

Мы можем указать, что пакет должен быть больше версии 1.2.7

>= 1.2.7

Тогда, при установке пакетов версия будет искаться только среди версий, которые больше 1.2.7.

Также можно указывать range.

>=1.2.7 <1.3.0

Также есть специальные пре релизные теги.

1.2.3-alpha.3
1.2.3-beta.0

Также часто встречаются тильда и каретка.

Когда у нас стоит тильда

~1.2.3

Это значит, что версия может меняться только от 1.2.3 до 1.3.0, то есть могут применятся только патчи, а минорная версия обновлятся не может.

Если же у нас стоит каретка

^1.2.3

То можно обновлять и минорную версию и накатывать патчи. То есть от 1.2.3 до 2.0.0.

Если у вас возникли какие-то вопросы или комментарии, пишите их прямо под этим видео.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
Moe Green
11 месяцев назад
полезная справка )
monsterlessons
11 месяцев назад
На здоровье)
Moe Green
11 месяцев назад
У меня такой вопрос. Я читаю книжку все того же 'Итан Браун - "Веб-разработка с применением Node и Express"'. Автор упоминает о джокерных символах (~) и советует использовать только их для управления версиями пакетов в package.json. Типа это разрешает обновлять только патчи пакета и это безопасно для системы проекта в целом. Насколько его утверждение оправдано - как Ваше мнение на этот счет? И еще (вопрос ради интереса) - по-умолчанию тот же npm/yarn устанавливает пакеты с возможностью обновления до минорной версии - "^1.2.3". Чтобы npm/yarn ставил пакеты с возможностью обновления только патча, нужно лезть в настройки npm/yarn? Прямо из cli нельзя указать ему - "ставь так - '~1.2.3'"?
monsterlessons
11 месяцев назад
Обновлять что-либо, даже патч небезопасно. Когда вы используете yarn.lock, то ни 1 ваш пакет не обновится. Даже патч версия. В npm 5, по моему, они накатывают патчи даже с lock файлом. P.S. я не вижу смысла заморачиваться с обновлением пакетов вообще. Когда на проекте реально возникает необходимость обновить пакет, тогда и обновляем.
Rider. ok
1год назад назад
А возможен вариант обновление и мажорной версии?
monsterlessons
1год назад назад
Нет. Обычно это не нужно, так как мажорная версия = все апи поменялось и нужно делать много изменений в проекте. Поэтому нет смысла делать это автоматически.
Rider. ok
1год назад назад
благодарю!