Что такое package.json и его основные поля?

JuniorNode.js · Backend·Обновлено 20 августа 2026
Коротко
package.json — это манифест Node.js-проекта в формате JSON, который описывает метаданные пакета, его зависимости и скрипты для npm/yarn/pnpm.

Что такое package.json

package.json — это манифест Node.js-проекта в формате JSON, который лежит в корне проекта. Он описывает метаданные пакета (имя, версию, автора), список зависимостей, скрипты для запуска задач и другие настройки, которые использует npm (или yarn/pnpm) для установки пакетов и работы с проектом.

Файл создаётся командой npm init (или npm init -y для значений по умолчанию) и обязателен для любого пакета, который публикуется в npm-реестр. Он полезен и для приложений, которые никуда не публикуются — как единая точка конфигурации проекта.

Основные поля

  • name — имя пакета, уникальное в npm-реестре (нижний регистр, без пробелов)
  • version — версия пакета по SemVer (major.minor.patch)
  • description — краткое описание пакета
  • main — точка входа (файл, который импортируется через require('package'))
  • type — система модулей: "commonjs" (по умолчанию) или "module" (ES-модули)
  • scripts — команды, запускаемые через npm run <name> (например start, test, build)
  • dependencies — зависимости, нужные приложению в продакшене
  • devDependencies — зависимости только для разработки (линтеры, тестовые фреймворки, сборщики)
  • peerDependencies — зависимости, которые должен предоставить сам потребитель пакета
  • keywords — массив ключевых слов для поиска пакета в npm
  • author и license — автор и лицензия
  • repository — ссылка на репозиторий с исходным кодом
  • engines — требования к версии Node.js/npm
  • private — флаг true защищает пакет от случайной публикации в npm

Версионирование зависимостей

В dependencies версии обычно указываются с префиксами:

  • ^1.2.3 — разрешает обновления minor и patch версий (1.x.x, но не 2.0.0)
  • ~1.2.3 — разрешает только patch-обновления (1.2.x)
  • 1.2.3 — жёстко фиксированная версия без обновлений

package.json vs package-lock.json

package.json описывает допустимые диапазоны версий зависимостей, а package-lock.json фиксирует точные версии всего дерева зависимостей (включая транзитивные), чтобы установка была детерминированной на разных машинах и в CI.

Зачем нужны scripts

Поле scripts позволяет описать любые команды проекта одним словом: npm run dev, npm test, npm run build. Это удобная точка входа для CI/CD и для новых разработчиков в команде — не нужно помнить длинные команды сборщиков или тестовых раннеров.

Что хочет услышать интервьюер

Понимание, что package.json — манифест проекта, а не просто список зависимостей

Знание ключевых полей: name, version, scripts, dependencies, devDependencies

Понимание разницы между dependencies и devDependencies

Знание разницы между package.json и package-lock.json

Понимание семантики версий SemVer и префиксов ^ и ~

Пример: Пример package.json

{
  "name": "my-app",
  "version": "1.0.0",
  "description": "Пример приложения на Node.js",
  "main": "index.js",
  "type": "commonjs",
  "private": true,
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.19.2"
  },
  "devDependencies": {
    "nodemon": "^3.1.0",
    "jest": "^29.7.0"
  },
  "engines": {
    "node": ">=18.0.0"
  }
}

Типичные ошибки

Путают dependencies и devDependencies, кладут линтеры и тестовые фреймворки в dependencies

Не знают, что package-lock.json нужен для детерминированной установки версий

Считают, что main всегда указывает на index.js, не зная про поле exports/type

Не понимают разницы между ^ и ~ в версиях зависимостей

Забывают, что scripts можно использовать для любых команд, а не только start/test

Лучшие курсы по теме

изображение курса

Docker и Ansible

Антон Ларичев
AI-тренажерыAI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Node.js с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Nest.js с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.6
3 999 ₽ 6 990 ₽
Подробнее