# Разбираемся с lock файлами в npm

03:35
poster
В этом видео мы с вами разберемся, зачем нужны lock файлы, при работе с npm и yarn.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

В этом видео мы с вами разберемся, зачем нужны lock файлы, при работе с npm.

Что такое lock файлы вообще? В разных языках для установки пакетов существуют пакетные менеджеры. Например, в node - это npm. И когда мы устанавливаем пакеты, то мы должны быть уверены, что мы все время будем устанавливать одинаковую версию пакетов. Потому что любое, даже минорное обновление, может все поломать.

Очень много людей считает, что если в package.json указать точные версии пакетов, но они никогда не обновятся и проект в безопасности. Это абсолютно не так. В чем же проблема?

Да, указав версию пакета, например, в 1.5.0 мы всегда будем устанавливать этот пакет именно версии 1.5.0. Но у каждого пакета есть свои зависимости. И мы никогда не знаете, как он их менеджит. Возможно, он не лочит их на конкретной версии. А даже если и лочит, то зависимости зависимостей могут иметь не точные версии. Поэтому, рано или поздно, с большим количеством пакетов на проекте, при очередной установке пакетов все может поломаться и прийдется долго дебажить, почему.

Эту проблему решают с помощью lock файлов. Что это такое? Это дополнительный файл, который генерируется автоматически и хранит в себе полное дерево всех зависимостей с версиями. И после его генерации все пакеты устанавливаются по новой с версиями и зависимостями, которые там указаны.

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

Если же вы используете yarn, вместо npm, то у вас также автоматически генерируется файл yarn.lock, который лочит все версии.

Если же вы все еще используете более старый npm, то lock файл у вас не будет создаваться руками. Для создания его нужно выполнить команду

npm shrinkwrap

В результате у вас создастся файл npm-shrinkwrap.json, в котором будут залочены все зависимости.

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

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

Если у вас возникли какие-то вопросы или комментарии, пишите их прямо под этим видео.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
vlad
1год назад назад
при npm shrinkwra вылетает npm ERR! Windows_NT 10.0.15063 npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "shrinkwrap" npm ERR! node v7.7.4 npm ERR! npm v4.1.2 npm ERR! Problems were encountered npm ERR! Please correct and try again. В чем может быть проблема ошибки?
monsterlessons
1год назад назад
Там есть какие-то ошибки выше? npm просто написал, что при выполнении команды произошли ошибки. но в тексте, что вы скинули я ошибок не вижу.
vlad
1год назад назад
дальше следовало много подобных (штук 70 extraneous): npm ERR! extraneous: acorn-jsx@3.0.1 D:\_DEVELOPER\Sites\_GIT\frontend-demo-snippets\node_modules\acorn-jsx npm ERR! extraneous: acorn@3.3.0 D:\_DEVELOPER\Sites\_GIT\frontend-demo-snippets\node_modules\acorn-jsx\node_modules\acorn
vlad
1год назад назад
может все дело в последовательности. 1. ошибки вылетели когда я уже был с"загруженными" с npm модулями и затем дал команду npm shrinkwra 2. когда же в пустую папку с npm init (добавил package.json) и дальнейшем npm shrinkwra - появился файл npm-shrinkwrap.json 3 ИТОГ(ВОПРОС) - npm shrinkwra ВВОДИТЬ ДО!!! ЗАГРУЗКИ МОДУЛЕЙ С npm?
vlad
1год назад назад
если в дальнейшем загрузить модуль с npm то все его зависимости отразятся в npm-shrinkwrap.json. одно уточнение при загрузке обязательно использовать -S (npm i help-functions -S) без -S в npm-shrinkwrap.json ничего не отобразилось
vlad
1год назад назад
еще один момент но уже не по теме Когда находясь в комментариях жму обновить то меня вбрасывает на "Текст видео". как-то не айс.
monsterlessons
1год назад назад
Если вы все время находились на одной и той же версии node, npm, то должно работать и с уже установленными модулями и без. Баг с обновлением страницы добавил в беклог.