В чем разница между Package.json и Package-lock.json

Ответ

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.