Зачем нужны package.json и package-lock.json и чем отличаются dependencies и devDependencies?
Модули и пакеты
`package.json` описывает проект и допустимые диапазоны версий зависимостей, `package-lock.json` фиксирует точное дерево установленных версий.
Что внутри package.json
name,version,scripts,mainилиexports,type.dependencies— нужны приложению в рантайме.devDependencies— только для разработки и сборки: линтеры, тесты, компиляторы.peerDependencies— пакет рассчитывает, что версия будет у потребителя (например, React у библиотеки компонентов).
Зачем lock-файл
Диапазон ^1.2.0 через месяц даст другую версию, и сборка перестанет быть воспроизводимой. Lock-файл фиксирует версии и хэши, поэтому на CI ставят зависимости через npm ci: он берёт ровно то, что записано, и падает при расхождении.
npm ci # чистая установка по lock-файлу, для CI
npm install # может обновить lock-файл
npm ci --omit=dev # без devDependencies, для образа в productionКоротко для собеседования
package.json — что нужно, lock-файл — что именно поставили. Lock-файл коммитят, на CI используют npm ci, а в production не тянут devDependencies.