Для зміни npm node_modules дерева або будь-якої package.json дії автоматично генерується package-lock.json. Він описує точне дерево, яке генерується, щоб наступні інсталяції могли генерувати те саме дерево, незалежно від проміжних оновлень залежностей.
Цей файл призначений для подачі до репозиторію вихідного коду і доступний для різних цілей:
Описує єдине представлення дерева залежностей, щоб гарантувати, що партнери по команді, розгортання та безперервна інтеграція забезпечують встановлення однакових залежностей.
Надайте користувачам інструмент для «просування» до попереднього стану node_modules без необхідності комітувати сам каталог.
Сприяти кращій видимості змін дерева завдяки читабельним відмінностям у контролі версій.
А також оптимізувати процес встановлення, дозволяючи npm пропускати дублювання метаданих у раніше встановлених пакетах.
Ключова деталь package-lock.json полягає в тому, що його не можна опублікувати, і він буде ігноруватися, якщо він знайдеться десь поза топовим пакетом. Він має спільний формат із npm-shrinkwrap.json, фактично той самий файл, але дозволяє публікацію. Це не рекомендується, якщо ви не розгортаєте CLI-інструмент або не використовуєте процес релізу для створення продакшн-пакету.
Якщо і package-lock.json, і npm-shrinkwrap.json існують у кореневій директорії пакету, package-lock.json буде повністю ігноровано.
Оригінальне посилання: https://docs.npmjs.com/files/package-lock.json
З моменту виходу npm 5.x роль блокування 5.6.0 змінювалася багато разів, і тепер багато дрібних білих текстів в Інтернеті застрягли в попередньому перекладі документів.
Я оновив з npm3.x до npm5, але виявив, що явище при виконанні 'npm i' не відповідає популярній науковій статті в Інтернеті.
Зазначено, що незалежно від того, як package.json файл змінюється, якщо npm i виконується неодноразово, npm буде завантажено відповідно до інформації про версію, описану у файлі блокування.
Також згадується, що при повторенні npm i npm ігнорує інформацію про блокування і завантажує модуль оновлення відповідно до інформації про версію версії пакету в package.json (блокування, здається, марне).
**Згідно з інформацією, правила NPM I змінювалися тричі з моменту виходу npm 5.0. **
1. NPM 5.0.x версія, незалежно від того, як змінюється package.json, npm i буде завантажений відповідно до файлу блокування
package-lock.json файл не оновлювався після зміни package.json файл · Випуск #16866 · НПМ/НПМ https://github.com/npm/npm/issues/16866 Ця проблема скаржиться на цю проблему, очевидно, я змінив package.json вручну, чому б вам не дати мені пакет оновлення! А потім це призводить до проблеми 5.1.0...
2. Після версії 5.1.0 встановлення npm ігноруватиме файл блокування для завантаження останнього npm
Тоді хтось підняв це питання: чому блокування пакетів ігнорують? · Випуск #17979 · НПМ/НПМ https://github.com/npm/npm/issues/17979 Скарга згодом еволюціонувала у правила після версії 5.4.2.
3. Після версії 5.4.2 чому ігнорується блокування пакетів? · Випуск #17979 · НПМ/НПМ https://github.com/npm/npm/issues/17979
Грубо кажучи, якщо package.json змінено, і package.json відрізняється від файлу блокування, npm завантажить останній пакет відповідно до номера версії та семантичного значення пакета під час виконання 'npm i' і оновить його до блокування.
Якщо обидва варіанти знаходяться в одному стані, то при виконанні npm я завантажую відповідно до блокування, незалежно від того, чи нова версія пакета.
|