Магія залежностей package.json
❓ Що відбувається коли ви встановлюєте нову залежність
1️⃣ В руті проекту, npm шукає спеціальний файл налаштування .npmrc. Якщо його немає або в ньому не змінена адреса реєстру, npm буде використовувати https://registry.npmjs.org в якості реєстру. І так, ви можете вказати власний, приватний реєстр.
2️⃣ Якщо бібліотека ще не встановлена і а) ви не вказали її версію вручну і б) не вказали параметри додавання, npm візьме останню версію з реєстру, додасть її до package.json додавши перед версією символ ^, а також додасть в package.lock.json
3️⃣ Символ ^ означає, що при оновленні залежностей, npm має право взяти останню версію в рамках мажорної. Так ^3.0.0 може перетворитися на 3.2239.9, але не може на 4.0.0. Це правило не розповсюджується на пакети мажорної версії 0. Ви можете використати прапорець --save-exact щоб npm зафіксував конкретну версію бібліотеки. Це називається semver, або семантичне версіонування про яке буде в наступному пості.
4️⃣ Якщо бібліотека вже встановлена, npm оновоить її використовуючи п.3. Ці зміни будуть зафіксовані як в package.json так і package-lock.json.
5️⃣ Те саме, окрім додавання в packge.json відбувається з усіма підзалежностями, відповідно до налаштувань в їх власних package.json.
6️⃣ Існує цікава ситуація, коли під час апдейту, версія залежності першого рівня не змінюється, але через "люфт" версій можуть змінитися підзалежності, . Саме тому, package-lock.json обов'якзово має бути закомічений. Він дозволяє контролювати всі залежності незважаючи на їх рівень та гарантує ідентичність залежностей у вас, вашого колеги та на проді.
7️⃣ Якщо ви встановлюєте залежності на існуючому проекті і файл package-lock.json існує - npm встановить залежності відповідно до того що лежить в package-lock.json файлі ігноруючи все що я написав вище. Якщо packge-lock не існує, всі версії будуть вираховуватися відповідно до описаних правил на основні pacakge.json після чого сформується package-lock.json. І так, є не 0 вірогідність що після цього ваш проект взагалі не запуститься (особистий досвід на одному з хакатонів України)
Висновки:
👉Package-lock.json - є обов'язковим файлом у вашому проекті, звісно якщо ви не прихильник глибокого дебагу.
@reactbeginners
Post #289
1.67K
- 👍 18
- 🔥 7
- ❤ 2