HTML Diff
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>Как я выше написал, мы можем указать, какую версию можем использовать Например, в диапазоне &gt;=1.2.3 &lt;2.0.0. И если у зависимости будет новая версия 2, то она будет проигнорирована, будет установлена максимальная версия 1.</p>
7 <p>Как я выше написал, мы можем указать, какую версию можем использовать Например, в диапазоне &gt;=1.2.3 &lt;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 &lt;pkg&gt;, либо изменив package.json и выполнив npm install</p>
14 </ul><p>Если необходимо, то пакеты можно обновить командой npm update &lt;pkg&gt;, либо изменив package.json и выполнив npm install</p>