Справяне със заключващи файлове в NPM 5 - devSchacht - Среден

Файлът за заключване вече съдържа и версията на формата, посочена в полето lockfileVersion, зададено на 1. Това означава, че с бъдещи актуализации на формата няма да се налага да гадаете коя конкретна версия използва заключващият файл. Предишният формат все още се поддържа и се разпознава като версия 0 .
Може би сте забелязали, че разрешеното поле все още присъства във файла и сочи към конкретен URI. Имайте предвид обаче, че NPM вече може да определи (въз основа на настройките в .npmrc), че системата е конфигурирана да използва различен регистър и ако е така, тя ще използва прозрачно това вместо това. Това работи добре с полето за целостта, тъй като сега, докато пакетът съвпада с подписа, няма значение откъде е дошъл.
Друго нещо, което си струва да се спомене, е, че заключващият файл точно описва дървото на физическата директория в директорията node_modules. Предимството на това е, че дори ако различни разработчици използват различни версии на NPM, те пак трябва да имат не само една и съща версия на зависимостите, но едно и също дърво на директориите. Това отличава NPM 5 от другите мениджъри на пакети като Прежди. Преждата описва зависимости само между отделни пакети в плосък формат и разчита на текущата си реализация, за да създаде структура на директория. Това означава, че когато вътрешният алгоритъм се промени, структурата също ще се промени. Ако искате да научите повече за разликите между преждата и NPM 5, когато става въпрос за заключващия файл, прочетете за детерминизма на преждата.
Две заключени файлове
Вече споменах, че всъщност има повече от един заключващ файл сега. NPM сега автоматично генерира заключващ файл с име package-lock.json, когато се инсталира нова зависимост или файлът все още не съществува. Както беше споменато в началото, заключващият файл е моментна снимка на текущото дърво на зависимостите и позволява повторната игра на сглобки между машините за разработка. Ето защо се препоръчва да го добавите към вашата система за контрол на версиите.
Може би си мислите, че същото вече може да бъде постигнато с npm shrinkwrap и неговия npm-shrinkwrap.json. И си прав. Причината за създаването на нов файл е да се опитаме да предадем по-добре идеята, че NPM поддържа заключващи зависимости, което очевидно е било проблем в миналото.
Може също да ви е интересно да знаете какво се случва, когато стартирате npm shrinkwrap в директория, която вече съдържа package-lock.json. Отговорът е доста прост: NPM просто ще преименува package-lock.json на npm-shrinkwrap.json. Това е възможно, тъй като файловият формат е същият.