Что находится в файле package-lock.json

Ответ

Файл package-lock.json автоматически генерируется npm при установке зависимостей. Он фиксирует точные версии всех пакетов и их зависимостей, включая вложенные, чтобы гарантировать идентичные установки в разных окружениях.

Ключевые особенности:

  • Содержит дерево зависимостей с точными версиями (в отличие от package.json, где могут быть диапазоны).
  • Обеспечивает воспроизводимость сборок (npm ci использует именно его).
  • Автоматически обновляется при изменении node_modules или package.json.

Пример структуры:

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "lodash": {
      "version": "4.17.21",
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
      "integrity": "sha512-..."
    }
  }
}

Не рекомендуется редактировать его вручную!

Ответ 18+ 🔞

А, package-lock.json, ёпта! Ну это ж классика, блядь! Сейчас объясню, как этот зверь живёт, чтобы ты не ломал голову.

Представь, ты написал в package.json — «нужна мне lodash версии ^4.17.0». Ну, вроде как, «дайте что-то свеженькое, от этой версии и выше». А npm такой: «О, слушай, дружок-пирожок, а я тебе сейчас подсуну самую новую 4.999.88, которая только вчера вылезла, и половина твоего кода нахрен сломается!» Вот чтобы такого пиздеца не было, и существует этот файл.

По сути, это — законсервированная, блядь, сметана! После первой установки npm хватает все пакеты, которые реально скачались, записывает их ТОЧНЫЕ версии, хеши и адреса, и загоняет в package-lock.json. И теперь, когда твой коллега или сервер будет ставить зависимости, они возьмут не «что-то свеженькое», а именно те же самые версии, что и у тебя. Полная идиллия, блядь, воспроизводимость!

Вот смотри, как он выглядит внутри, этот монстр:

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "lodash": {
      "version": "4.17.21",
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
      "integrity": "sha512-..."
    }
  }
}

Видишь? Не «^4.17.21», а чётко «4.17.21». Адрес откуда качал и даже хеш целостности, чтобы никто левый не подсунул тебе какую-нибудь дичь вместо пакета. Красота, блядь!

И главное правило, которое надо выжечь в мозгу раскалённым паяльником: НЕ ЛЕЗЬ ТУДА РУКАМИ, НАХУЙ! Это не твоё. Это файл-автомат. Он сам обновляется, когда ты делаешь npm install. Твоё дело — package.json. А этот... пусть живёт своей жизнью. Для полной чистоты установки используй npm ci — он игнорирует всё, кроме lock-файла, и ставит чётко по нему. Быстро и без сюрпризов.

Короче, запомни: package.json — это твой пожелательный список «хотелок», а package-lock.json — это суровая, блядь, опись имущества, что реально лежит в твоём node_modules. И да пребудет с тобой воспроизводимость сборок, ебать её в сраку!