Узнайте, как использовать команды npm i и npm ci для правильного управления версиями зависимостей.

Знание значения символов Tilde(~) и Caret(^), понимание цели семантического управления версиями пакетов Node и знание различий между Команды npm i и npm ci помогут эффективно управлять зависимостями в проекте Node или любом интерфейсном приложении на основе Node.js.

1. Что такое package.json?

Все проекты на основе Node, пакеты npm — содержат файл package.json, который обычно находится в корневом каталоге. Этот файл представляет собой просто файл JSON, содержащий метаданные проекта. Эти метаданные включают в себя — имя, домашнюю страницу, ключевые слова, зависимости и т. д. свойства. Чтобы узнать больше о файле package.json, вы можете проверить его официальную документацию по этой ссылке: https://docs.npmjs.com/ cli/v8/configuring-npm/package-json

2. Что такое семантическое управление версиями?

Номер версии пакетов npm имеет определенный формат. Формат - MAJOR.MINOR.PATCH. Согласно официальной документации семантического версионирования (https://semver.org/) —

1. ОСНОВНАЯ версия обновляется, когда происходят какие-либо несовместимые изменения API.

2. Версия MINOR обновляется, когда добавляются новые функции с обратной совместимостью.

3. Версия PATCH обновляется при исправлении ошибок с обратной совместимостью.

Следует также отметить, что при обновлении MAJOR версии сбрасываются номера версий MINOR и PATCH, а при обновлении MINOR > обновляет версию, он сбрасывает номер версии PATCH.

3. Значение символов тильды (~) и каретки (^)

В файле package.json есть свойство, называемое зависимостями — оно содержит название и номер версии различных библиотек (также известных как зависимости), используемых в проекте. Но перед номером версии может стоять специальный символ тильда(~) или каретка(^), который определяет версию библиотеки для установки в проект. При использовании npm i для установки зависимостей проекта значение этих двух символов легко понять. Короче говоря, символ Caret(^) указывает команде npm i установить последнее MINOR обновление, тогда как тильда (~) указывает команде npm i устанавливать библиотеку только до последнего обновления PATCH.

4. Пример проекта Node.js

Давайте разберемся, чем отличаются символы тильда(~) и карет(^) при использовании npm i (или npm install) и команду npm ci для установки зависимостей в ваш проект на примере.

Мы собираемся создать простой проект node.js.

Шаг 1: Инициализируйте проект

Создайте папку с именем NODE-PROJECT-EXAMPLE (или дайте имя по своему желанию!) и запустите команду npm init --y в папку, чтобы инициировать проект узла. Откройте папку в VSCode (или любой из ваших любимых IDE). Ваш NODE-PROJECT-EXAMPLE будет выглядеть так —

Шаг 2: Установите зависимость

Установите библиотеку — history (или вы можете установить любую другую библиотеку для этого теста) в NODE-PROJECT-EXAMPLE. Для этого выполните команду история установки npm. Эта команда установит последнюю версию библиотеки history и папки node_modules, файл package-lock.json будет создан в корневом каталоге NODE-PROJECT-EXAMPLE, а зависимость Свойство добавлено в файл package.json.

Ваш файл package.json будет содержать свойство dependencies с именем и версией зависимости. Файл будет выглядеть так —

Шаг 3: Обновите версию зависимости

На данный момент этот проект содержит последнюю версию библиотеки истории. Но по какой-то причине вашему проекту нужна история версии 5.0.0. Таким образом, вы понижаете версию истории до 5.0.0. Для этого нужно обновить номер версии библиотеки history в файле package.json (написать точный номер версии без символов ~ или ^) и удалите пакет -lock.json и папку node_modules. Теперь снова запустите команду npm install и выведите результат, как показано на изображении ниже:

Вы можете проверить версию установленной библиотеки из терминала с помощью команды npm list, и вы получите вывод, как показано ниже:

Итак, наша цель — установить точную 5.0.0 версию истории.

Шаг 4: Использование тильды (~) и символа вставки (^)

Теперь этот проект будет содержать версию истории точно 5.0.0, так как мы не добавляем ~ или ^ перед номером версии в файле package.json. Таким образом, библиотека history никогда не будет обновляться в соответствии с последней версией в ее репозитории npm. Мы пропустим любые обновления, связанные с исправлением ошибок, или обновления, связанные с новыми функциями, сделанные разработчиками библиотеки history.

Поэтому мы добавим знак вставки (^) перед номером версии, чтобы разрешить установку последнего MINOR с его последним обновлением PATCH. Или мы добавим знак тильды (~) перед номером версии, чтобы разрешить установку только последнего обновления PATCH.

Например, номер версии ^5.0.0 позволяет установить версию 5.3.0 (при написании этого блога это последнее незначительное обновление), а номер версии ~5.0.0 позволяет установить версию 5.0.3 (при написании этого блога это это последнее обновление патча)

Помните, что каждый раз, когда вы добавляете или перезаписываете номер версии в файле package.json, удаляйте package-lock.json и папку node_modules перед выполнением команды npm i.

Надеюсь, вам понятно, как можно управлять различными версиями зависимостей в вашем проекте, разумно используя тильду (~) и каретку. (^) знак.

5. Пример использования npm i и npm ci

npm i или npm install — эта команда устанавливает последние или обновленные зависимости в зависимости от Символ тильды (~) или Каретки (~) в package.json и перезаписывает файл package-lock.json и папку node-modules.

npm ci — эта команда устанавливает точную версию зависимостей, упомянутых в package.json и файл package-lock.json. Эта команда не обращает внимания на символы тильды(~) или каретки(~) в Файл package.json. Для этой команды требуется наличие в проекте файла package-lock.json.

Итак, перед использованием любой из этих двух команд нам нужно решить, хотим ли мы, чтобы в проекте были установлены последние обновления зависимостей, или же мы устанавливаем в проекте только упомянутую версию — если первое решение — это наше решение, то мы должны запустить npm i, иначе во втором случае мы должны запустить команду npm ci.

Удачного кодирования!

Надеюсь, эта история поможет вам прояснить всю путаницу в отношении package.json, npm i и Команда npm ci и символ тильда (~) вместо символа каретки (~).

Станьте компонуемым: создавайте приложения быстрее, как Lego

Bit – это инструмент с открытым исходным кодом для модульного и совместного создания приложений. Перейдите на компоновку, чтобы поставлять быстрее, более последовательно и легко масштабировать.

Подробнее

Создавайте приложения, страницы, пользовательский опыт и пользовательские интерфейсы как автономные компоненты. Используйте их, чтобы быстрее создавать новые приложения и возможности. Используйте любой фреймворк и инструмент в своем рабочем процессе. Делитесь, повторно используйте и сотрудничайте, чтобы строить вместе.

Помогите своей команде:

Микроинтерфейсы

Дизайн-системы

Совместное использование кода и повторное использование

Монорепо

Узнать больше