← Назад к вопросам

Что такое npm?

1.0 Junior🔥 291 комментариев
#Инструменты и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое npm

npm (Node Package Manager) — это менеджер пакетов для JavaScript/Node.js. Это официальный пакетный менеджер для экосистемы Node.js и один из самых важных инструментов при разработке JavaScript приложений.

История и назначение

npm создан в 2010 году как решение проблемы управления зависимостями в Node.js проектах. Сегодня npm — это:

  • Менеджер пакетов для управления библиотеками и зависимостями
  • Реестр (registry) с миллионами открытых пакетов
  • Инструмент для управления версиями
  • Платформа для публикации собственных пакетов

Основные команды

# Инициализация нового проекта
npm init
npm init -y # с дефолтными параметрами

# Установка зависимостей
npm install          # установить все зависимости из package.json
npm install lodash   # установить конкретный пакет
npm install lodash@4.17.21  # конкретная версия
npm install --save-dev webpack  # dev зависимость

# Удаление пакетов
npm uninstall lodash
npm remove webpack --save-dev

# Обновление зависимостей
npm update
npm update lodash  # обновить конкретный пакет

# Просмотр информации
npm list            # список всех установленных пакетов
npm list lodash     # информация о конкретном пакете
npm info lodash     # подробная информация из registry

package.json файл

package.json — основной файл конфигурации проекта:

{
  "name": "my-app",
  "version": "1.0.0",
  "description": "My awesome application",
  "main": "index.js",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "react": "^19.0.0",
    "next": "^16.0.0"
  },
  "devDependencies": {
    "jest": "^29.0.0",
    "eslint": "^8.0.0"
  }
}

package-lock.json

package-lock.json — файл для фиксации точных версий зависимостей:

  • Гарантирует одинаковую среду для всех разработчиков
  • Содержит информацию о точных версиях и хешах
  • Автоматически создаётся при установке пакетов
  • ВСЕГДА коммитится в систему контроля версий
# Обновить lock файл без установки новых версий
npm ci  # clean install с точными версиями из lock файла

Версионирование (Semver)

npm использует Semantic Versioning (семантическое версионирование):

X.Y.Z
^ ^ ^
| | └─ PATCH (исправления ошибок)
| └─── MINOR (новые функции, обратно совместимы)
└───── MAJOR (breaking changes)

Операторы в package.json:

{
  "dependencies": {
    "lodash": "4.17.21",      // точная версия
    "react": "^19.0.0",       // до следующего MAJOR (совместимо)
    "next": "~16.1.0",        // до следующего MINOR
    "jest": ">=29.0.0",       // минимальная версия
    "eslint": "*"             // любая версия
  }
}

npm скрипты (npm scripts)

В package.json можно определить команды:

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "test": "jest --coverage",
    "lint": "eslint src/",
    "lint:fix": "eslint src/ --fix"
  }
}

Запуск скриптов:

npm run dev        # запустить скрипт dev
npm test           # npm test и npm start это специальные сокращения
npm run build      # запустить build

Types зависимостей

{
  "dependencies": {
    "react": "^19.0.0"     // production зависимости (нужны пользователю)
  },
  "devDependencies": {
    "eslint": "^8.0.0"     // dev зависимости (только для разработки)
  },
  "peerDependencies": {
    "react": "^18.0.0"     // требует наличие у потребителя
  },
  "optionalDependencies": {
    "fsevents": "^2.0.0"   // опциональна (не критична)
  }
}

Альтернативы npm

  • Yarn — быстрее, строже версионирование, лучше работает с монорепо
  • pnpm — экономит место на диске, быстрый, строгие зависимости
  • Bun — новый менеджер, очень быстрый, поддерживает npm команды

Все они совместимы с npm registry и используют package.json

npx — запуск пакетов

npx create-react-app my-app   # запустить npm пакет без установки
npx jest                       # запустить jest из node_modules
npx @latest/package           # запустить последнюю версию

Лучшие практики

  1. Коммитьте package-lock.json для консистентности
  2. Используйте npm ci на CI/CD вместо npm install
  3. Минимизируйте dependencies — каждый пакет это риск
  4. Регулярно обновляйте и проверяйте уязвимости:
    npm audit          # найти уязвимости
    npm audit fix      # автоматически исправить
    
  5. Используйте .npmrc для конфигурации

Итог: npm — это критически важный инструмент для любого frontend разработчика. Понимание его работы необходимо для управления зависимостями, версионирования и организации проектов.

Что такое npm? | PrepBro