@jeruthadam

Как правильно использовать package-lock.json?

Все знают, типа полезная штука, фиксирует версии пакетов, надо коммитить, нельзя удалять, блаблабла...

Сегодня столкнулся впервые с проблемой - npm install на сервере выполнялся с ошибкой, пока я не удалил package-lock. Вся локальная разработка происходит на Ubuntu 16.04, эта же Убунта стоит на сервере.

Что это было?
Как же его правильно использовать, кроме того как бездумно коммитить? Его надо периодически обновлять?
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
@MaxKorz
npm install на сервере выполнялся с ошибкой, пока я не удалил package-lock
Не надо было удалять. Зачем бездумно удалять? Почему бы не разобраться с ошибкой? По вашей аналогии, если начнет болеть палец на ноге, его надо просто отрубить, а не вылечить.

Как же его правильно использовать, кроме того как бездумно коммитить?
Команда npm install производит не только установку пакетов, но и обновление package-lock.json. Чтобы установить пакеты из package-lock.json (например, при развертывании проекта в новом окружении), нужно выполнять команду npm ci, тогда npm просто установит все пакеты и не затронет существующие конфиги.

Его надо периодически обновлять?
По хорошему - конечно нужно (т.к. зависимости зависимостей автоматически не обновляются), но на деле - с ним ничего не нужно делать, кроме как коммитить. При установке и удалении пакетов он сам обновлется.

UPD: Зачем этот файл нужен - объясняю на личном примере:
Я сам не понимал зачем нужен этот файл, долго противился его использовать, и даже запретил npm его создавать. А история такова: я постоянно работал над своим проектом, ставил, удалял, обновлял пакеты, все как обычно. В итоге, сделав перерыв на 2 месяца, мне понадобилось внести изменения в проект, а я был далеко от ПК на котором велась разработка проекта.

Я скачал из репозитория весь проект на свой ноутбук, запустил npm install и попытался собрать проект, а он не собирается - происходит ошибка, которой раньше не было. Через часы отладки выяснилось, что у меня все пакеты установлены с флагом ^ - то есть в package.json прописано (к примеру) "slider": "^1.0.0". Таким образом, на моем ПК, где проект был с самого начала, был установлен пакет версии 1.0.0 (актуальная версия на момент установки), а при чистой установке всех зависимостей через npm install установилась последняя версия 1.9.9. Как понимаете, такой скачок подразуемвает очень много изменений, и к сожалению не все авторы добросовестно следуют правилам semver (при breaking change нужно обновлять мажорную версию пакета), и изменения в последней версии оказались не совместимы с моим кодом.

Что делает package-lock.json - он запоминает все установленные пакеты, все их версии и зависимости на момент установки, и позволяет использовать всю эту информацию для установки пакетов. То есть, если бы у меня в тот момент был package-lock.json в файлах проекта, я бы просто сделал npm ci на своем ноутбуке, и у меня установилась бы не последняя версия пакета slider, которую я не тестировал, а та версия, которую запомнил package-lock.json - версия 1.0.0, которая мной протестирована. С тех пор я никогда не удаляю package-lock.json, и я больше никогда не испытывал подобных проблем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Cindx Москва
от 130 000 до 180 000 руб.
Reelmotion Games Санкт-Петербург
от 45 000 до 75 000 руб.
от 200 000 до 300 000 руб.
18 янв. 2019, в 14:12
70000 руб./в месяц
18 янв. 2019, в 13:24
500 руб./за проект
18 янв. 2019, в 13:04
12000 руб./в месяц