Ответ
package.json — это файл, описывающий зависимости проекта (dependencies и devDependencies) и метаданные (версия, скрипты и т. д.). Версии зависимостей могут указываться с гибкими диапазонами (^, ~), что позволяет устанавливать обновления в пределах мажорной/минорной версии.
package-lock.json автоматически генерируется при установке пакетов (npm install) и фиксирует точные версии всех зависимостей, включая вложенные. Это гарантирует воспроизводимость сборки: у всех разработчиков будут одинаковые версии пакетов.
Пример:
В package.json:
"dependencies": {
"lodash": "^4.17.0"
}В package-lock.json будет указана точная версия, например 4.17.21, и все её подзависимости.
Важно:
package-lock.jsonнельзя редактировать вручную.- При коммите в репозиторий его нужно включать, чтобы избежать "works on my machine" проблем.
npm ciиспользуетpackage-lock.jsonдля точной установки версий, в отличие отnpm install.