За 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 са се променяли три пъти от пускането на npm 5.0. **
1. NPM версия 5.0.x, независимо как се променя package.json, NPM I ще бъде изтеглен според заключвания файл
package-lock.json файл не е обновен след като package.json файлът е променен · Брой #16866 · NPM/NPM https://github.com/npm/npm/issues/16866 Този проблем се оплаква от този проблем, очевидно съм сменил package.json ръчно, защо не ми дадеш пакет за ъпгрейд! И тогава това води до проблема с 5.1.0...
2. След версия 5.1.0, инсталацията на npm ще игнорира заключвания файл, за да изтегли последния npm
Тогава някой повдигна този въпрос защо се игнорира заключването на пакета? · Брой #17979 · NPM/NPM https://github.com/npm/npm/issues/17979 Жалбата в крайна сметка се превърна в правилата след версия 5.4.2.
3. След версия 5.4.2, защо заключването на пакета се игнорира? · Брой #17979 · NPM/NPM https://github.com/npm/npm/issues/17979
Грубо казано, ако package.json се промени и package.json е различен от файла за заключване, npm ще изтегли последния пакет според номера на версията и семантичното значение на пакета при изпълнение на 'npm i' и ще го актуализира до заключване.
Ако и двете са в едно и също състояние, тогава при изпълнение на npm ще изтегля според заключването, независимо дали версията на пакета е нова или не.
|