0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Файл package.json позволяет указать диапазон версий пакетов, которые нужно ставить. Это нужно, чтобы не следить вручную за появлением новых версий пакетов. Разработчики договорились между собой, что будут использовать<a>семантическое версионирование</a>при создании пакетов:</p>
1
<p>Файл package.json позволяет указать диапазон версий пакетов, которые нужно ставить. Это нужно, чтобы не следить вручную за появлением новых версий пакетов. Разработчики договорились между собой, что будут использовать<a>семантическое версионирование</a>при создании пакетов:</p>
2
<ul><li>X.1.1, где X - это мажорная версия, которая может содержать несовместимые с предыдущей версией изменения</li>
2
<ul><li>X.1.1, где X - это мажорная версия, которая может содержать несовместимые с предыдущей версией изменения</li>
3
<li>1.X.1, где X - это минорная версия, которая скорее всего содержит совместимые с предыдущей версией изменения</li>
3
<li>1.X.1, где X - это минорная версия, которая скорее всего содержит совместимые с предыдущей версией изменения</li>
4
<li>1.1.X, где X - это патч-версия, которая содержит различные исправления</li>
4
<li>1.1.X, где X - это патч-версия, которая содержит различные исправления</li>
5
</ul><p>Зачем это нужно? Бывает, что нужно создать что-то кардинально новое, но при этом не помешать пользователям работать со старой версией. Старая и новая версия могут иметь совершенно разный интерфейс, функции и требования. Например, требования к языку или интерпретатору. Но при этом иногда обнаруживаются баги в старой версии и её нужно поддерживать. Соответственно вносятся изменения и в старую, и в новую версию.</p>
5
</ul><p>Зачем это нужно? Бывает, что нужно создать что-то кардинально новое, но при этом не помешать пользователям работать со старой версией. Старая и новая версия могут иметь совершенно разный интерфейс, функции и требования. Например, требования к языку или интерпретатору. Но при этом иногда обнаруживаются баги в старой версии и её нужно поддерживать. Соответственно вносятся изменения и в старую, и в новую версию.</p>
6
<p>Возьмем для примера пакет с версией 1.0.0. Спустя время у него появилась версия 1.2.3. Разработчики решили, что хотят что-то кардинально поменять и выпускают новую версию 2.0.0. Но на старой версии нашли уязвимость, к ней выпустили патч - версия поднялась до 1.2.4.</p>
6
<p>Возьмем для примера пакет с версией 1.0.0. Спустя время у него появилась версия 1.2.3. Разработчики решили, что хотят что-то кардинально поменять и выпускают новую версию 2.0.0. Но на старой версии нашли уязвимость, к ней выпустили патч - версия поднялась до 1.2.4.</p>
7
<p>Как я выше написал, мы можем указать, какую версию можем использовать Например, в диапазоне >=1.2.3 <2.0.0. И если у зависимости будет новая версия 2, то она будет проигнорирована, будет установлена максимальная версия 1.</p>
7
<p>Как я выше написал, мы можем указать, какую версию можем использовать Например, в диапазоне >=1.2.3 <2.0.0. И если у зависимости будет новая версия 2, то она будет проигнорирована, будет установлена максимальная версия 1.</p>
8
<p>Но что если сегодня установим проект на наш комп, а завтра на продакшен, а в это время версии пакетов случайно обновятся и что-то сломается? Это неудобно. Поэтому существуют лок-файлы (package.lock), в котором фиксируется версия пакетов. Именно эта версия будет устанавливаться в каждом запуске, пока мы обновим package.lock.</p>
8
<p>Но что если сегодня установим проект на наш комп, а завтра на продакшен, а в это время версии пакетов случайно обновятся и что-то сломается? Это неудобно. Поэтому существуют лок-файлы (package.lock), в котором фиксируется версия пакетов. Именно эта версия будет устанавливаться в каждом запуске, пока мы обновим package.lock.</p>
9
<p>Когда мы хотим установить зависимости, мы можем использовать npm install или npm ci (Clean Install). Разница между ними следующая:</p>
9
<p>Когда мы хотим установить зависимости, мы можем использовать npm install или npm ci (Clean Install). Разница между ними следующая:</p>
10
<ul><li>npm install создаст lock-файл, если его нет. Для npm ci лок-файл обязателен</li>
10
<ul><li>npm install создаст lock-файл, если его нет. Для npm ci лок-файл обязателен</li>
11
<li>Если зависимости в package.json и package.lock не совпадают, то npm ci упадет с ошибкой</li>
11
<li>Если зависимости в package.json и package.lock не совпадают, то npm ci упадет с ошибкой</li>
12
<li>npm ci ставит все зависимости, npm install позволяет поставить зависимости индивидуально (добавить в package.json)</li>
12
<li>npm ci ставит все зависимости, npm install позволяет поставить зависимости индивидуально (добавить в package.json)</li>
13
<li>Если директория node_modules существует, то npm ci её удалит, зависимости поставятся с нуля</li>
13
<li>Если директория node_modules существует, то npm ci её удалит, зависимости поставятся с нуля</li>
14
</ul><p>Если необходимо, то пакеты можно обновить командой npm update <pkg>, либо изменив package.json и выполнив npm install</p>
14
</ul><p>Если необходимо, то пакеты можно обновить командой npm update <pkg>, либо изменив package.json и выполнив npm install</p>