Вопрос проверяет понимание управления зависимостями и различий между декларацией зависимостей и их фактической фиксацией.
package.json описывает зависимости и допустимые диапазоны их версий. package-lock.json фиксирует конкретные версии установленных пакетов и их дерево зависимостей. package.json нужен для описания проекта, а package-lock.json — для воспроизводимых установок. Они дополняют друг друга. Вместе они обеспечивают стабильность окружения.
В JavaScript-проектах используется два файла для работы с зависимостями, каждый из которых решает свою задачу.
package.json описывает требования проекта.
Он содержит:
список зависимостей
версии или диапазоны версий
скрипты и метаданные проекта
Пример версии зависимости:
"react": "^18.2.0"
Это означает, что допустимы обновления в рамках мажорной версии.
package-lock.json фиксирует результат установки зависимостей.
Особенности:
содержит точные версии пакетов
описывает полное дерево зависимостей
автоматически генерируется npm
Этот файл гарантирует, что:
все разработчики получают одинаковые версии пакетов
сборка в CI совпадает с локальной средой
package.json отвечает на вопрос:
какие зависимости нужны проекту
package-lock.json отвечает на вопрос:
какие версии реально установлены
package.json задаёт правила, а package-lock.json фиксирует конкретное состояние зависимостей, обеспечивая воспроизводимость сборки.