Модули, npm, package.json

↑ 6.1 Node.js изнутри · ← Предыдущая · → Следующая

По желанию~3 мин чтенияУровень: junior

Зачем это на собесе

Базовые вопросы: CommonJS против ES modules, версии зависимостей, lock-файл.

Объяснение

СистемаСинтаксисОсобенности
CommonJSrequire, module.exportsсинхронная загрузка, значения кэшируются
ES modulesimport/exportстатический анализ, асинхронная загрузка, "type": "module"
{
  "name": "orders-api",
  "version": "1.0.0",
  "type": "module",
  "scripts": { "dev": "tsx watch src/main.ts", "build": "tsc", "test": "vitest" },
  "dependencies": { "fastify": "^4.28.0" },
  "devDependencies": { "typescript": "~5.5.0" },
  "engines": { "node": ">=20" }
}

Семантическое версионирование (major.minor.patch): ^4.28.0 разрешает minor и patch, ~5.5.0 — только patch. package-lock.json фиксирует точные версии и хэши; в CI используйте npm ci (строго по lock-файлу, быстрее и воспроизводимо).

МенеджерОсобенности
npmстандарт
pnpmжёсткие ссылки, экономия диска, строгая структура зависимостей
yarnworkspaces, plug’n’play

Нюансы и подводные камни

  • dependencies и devDependencies: в образ продакшена ставьте только первые (npm ci --omit=dev).
  • Цепочки транзитивных зависимостей — риск supply chain: npm audit, фиксация версий, проверка пакетов.
  • Скрипты postinstall выполняют код при установке.
  • Смешение CJS и ESM даёт ошибки (ERR_REQUIRE_ESM, __dirname отсутствует в ESM).
  • Не коммитьте node_modules; коммитьте lock-файл.

Практика

  1. Настройте проект на ESM с TypeScript.
  2. Сравните время установки npm и pnpm.
  3. Выполните npm audit и разберите найденные уязвимости.

Вопросы с ответами

Связанные темы