Jump to content

Подсказка по npm, package.json, package-lock.json и почему это важно!


Recommended Posts

Для чего нужен файл package-lock.json ?!

и для чего его нужно использовать и добавлять в системы контроля версий (git и т.д.).

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

Это нужно для того, что б получить единое рабочее окружение для всех разработчиков.

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

Раз разработчик уже всё проверил и выложил свой lock файл, с описанием рабочего окружения, Вы тоже получаете такое же проверенное рабочее окружение у себя на компе.

Просто выполняете npm install и выгружаете зависимости в том порядке и тех же версий, который были у разработчика в проверенном окружении.

 

Почему это Важно и почему могут быть проблемы без package-lock.json?!

Потому что версии используемыех зависимостей постоянно меняются, версии вложенных пакетов тоже меняют, т.е. какая-то несуществуюнная библиотека вытягивает какой-то свой пакет старой версии и только на этой старой версии эта библиотека работает и т.д., какие-то пакеты утаревают, меняют названия и т.д. и т.п.

Вот всё это и описывается в package-lock.json, все эти возможные проблемные места.

Важно сохранить рабочее окружение, проверенное, на котором всё запускается.

 

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

Но на практике это не вегда так.

 

К примеру, сделали Вы проект, всё проверили, всё работает, удалили папку node_modules со всеми пакетами, оставили package.json с номерами версий и всё, добавили всё-таки в git или просто в архив запаковали и отложили архив до лучших времени, либо может передали другому разработчику.

 

В этом случае, велика вероятность, что, к премеру, через год, у Вас ничего не запустится из этого архива, если Вы просто сделаете npm install

Потому что за год поменялись многие пакеты, различные версии, зависимости внутри других зависимостей и т.д. и т.п.

Даже у Вас как автора кода могут возникнуть такие проблемы, а сторонний разработчик даже и запустить проект не сможет.

 

В итоге часто получается, так, что код, который работает без проблем сегодня, завтра просто не будет работать из-за изменений в зависимых пакетах.

 

Вот для этого и нужен файл package-lock.json

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

 

Благодаря такому снимку, любой человек, который будет работать с исходным кодом через год, к примеру, получит точно такое же окружение для запуска проекта как и год назад, т.е. с большой долей вероятности он его запустит без проблем и через год.

 

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

 

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

Для будущих пользователей Вашего приложения, они скажут Вам спасибо.

Да и для себя тоже, если Вы отложите например в сторону работу с кодом и вернётесь к нему через год, условно говоря.

Файл package-lock.json сэкономит Вам кучу времени.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...