Самостоятельное заявление перед началом этой статьи:-

Я разрабатывал реагирующие нативные приложения в течение последних 6 месяцев, но только недавно полностью понял работу вышеупомянутых файлов.

Я знаю, что я не единственный, поэтому подумал о написании статьи, чтобы объяснить, как на самом деле работают эти два файла и что означают различные знаки, символы и терминология.

1. Пакет.json

В целом package.json используется для отслеживания установленных нами зависимостей, хранения информации о нашем проекте, такой как имя, репозиторий Github, версия, а также скриптов для правильного запуска проекта.

Это очень полезно, когда другие люди хотят сотрудничать с вашим проектом и нуждаются во всех конкретных пакетах, которые вы использовали. Запустите команду «npm install» один раз, и все пакеты в объекте зависимостей будут установлены за один раз.

Работа с зависимостями: -

Допустим, вы работаете над новаторским проектом и вам нужна зависимость (например, mime), как только мы ее установим, зависимость будет указана в разделе зависимостей в package.json.

Если мы заглянем в папку node_modules, мы найдем папку с именем mime, что имеет смысл, учитывая, что npm хранит все устанавливаемые файлы пакетов.

Но если присмотреться, то будут созданы и другие папки, о которых мы не просили. Ну, вот где реальная сделка разыгрывается.

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

Итак, если мы внимательно посмотрим на package.json mime, он также будет содержать зависимости, поэтому другие неуказанные пакеты устанавливаются по мере их использования mime. Следовательно, цикл продолжается.

Обратите внимание, что mime является относительно небольшим пакетом по сравнению с другими пакетами, такими как webpack или react native. Они будут устанавливать свои зависимые зависимости, которые будут устанавливать свои соответствующие, и цикл продолжается, что приводит к очень известной аналогии: -

Теперь многие из вас могут понять причину, по которой мы не загружаем node_modules в наш репозиторий git.

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

Теперь, когда пакеты обновляются, номер версии обновляется.

Таким образом, способ присвоения номеров версий основан на семантическом управлении версиями.

Подробная информация здесь 👇🏽



Таким образом, в 3.0.0, если какие-либо серьезные изменения, которые происходят в пакете 3, обновляются и заменяются на 4. Основные изменения относятся к тем изменениям, которые могут нарушить ваш код. Они не совместимы с предыдущими версиями.

Если происходит какое-либо незначительное изменение, то средняя цифра обновляется и увеличивается, что не нарушает код и не вызывает ошибок. Они обратно совместимы.

И последняя крайняя правая цифра — это обновление патча и исправления ошибок.

Итак, терминология major.minor.patch. Следовательно, мы должны убедиться, что мы не обновляем ранее упакованную версию до ее последней основной версии, поскольку это может сломать и привести к сбою нашего кода.

К счастью, в npm есть некоторые гарантии для этого.

В package.json,

«^» и «~» — это меры безопасности, которые помогают безопасно обновлять.

Поэтому, когда я запускаю npm update, как упомянул mime «^», будут обновлены только младшая версия и версия исправления для основной версии, установленной в настоящее время.

Точно так же, как expo-image-picker ранее упоминал «~», npm update будет обновлять только версию патча для того же самого.

Однако, если мы намерены обновить пакет до его последней основной версии (например, mime)

npm установить mime@4

Или для более старой версии

npm установить mime@2

2. Пакет-lock.json: -

Допустим, вы клонируете репозиторий Github, теперь, когда вы запускаете npm install для установки зависимостей, если есть обновление версии пакета между временем, когда исходный автор установил его, и временем, когда вы его клонируете, npm установит последнюю дополнительную версию и версию исправления (с префиксом «^») или последнее исправление (если с префиксом «~»). Следовательно, произойдет несоответствие версий, и код может сломаться.

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

Спасибо за чтение, поделитесь, если вы нашли это проницательным