Стандарты

Пакетный менеджер

Стандарт выбора и использования пакетного менеджера в проектах.

Стандарт выбора и использования пакетного менеджера в проектах.

Основное правило

В рамках одного проекта используется только один пакетный менеджер.

Смешивание npm, pnpm, yarn в одном проекте приводит к:

  • Конфликтам lock-файлов
  • Разным версиям зависимостей у разных разработчиков
  • Проблемам в CI/CD

Рекомендуемый менеджер

Для Nuxt-проектов рекомендуется pnpm:

Критерийpnpmnpmyarn
Скорость установки⭐⭐⭐⭐⭐
Дисковое пространство⭐⭐⭐⭐⭐
Строгость зависимостей⭐⭐⭐⭐⭐
Совместимость с Nuxt⭐⭐⭐⭐⭐⭐⭐⭐

Настройка проекта

1. Указать менеджер в package.json

{
  "packageManager": "pnpm@9.15.0",
  "engines": {
    "node": ">=20.0.0"
  }
}

2. Добавить ограничение (только для pnpm)

Создать файл .npmrc:

engine-strict=true
auto-install-peers=true

3. Добавить preinstall hook

{
  "scripts": {
    "preinstall": "npx only-allow pnpm"
  }
}

Это предотвратит случайное использование другого менеджера.

Lock-файлы

МенеджерLock-файлВ .gitignore
pnpmpnpm-lock.yamlНЕТ
npmpackage-lock.jsonНЕТ
yarnyarn.lockНЕТ

Lock-файл ВСЕГДА коммитится в репозиторий.

Команды

pnpm (рекомендуется)

pnpm install              # Установка зависимостей
pnpm add <package>        # Добавить dependency
pnpm add -D <package>     # Добавить devDependency
pnpm remove <package>     # Удалить пакет
pnpm update               # Обновить зависимости
pnpm run <script>         # Запустить скрипт
pnpm dev                  # Сокращение для pnpm run dev

npm

npm install               # Установка зависимостей
npm install <package>     # Добавить dependency
npm install -D <package>  # Добавить devDependency
npm uninstall <package>   # Удалить пакет
npm update                # Обновить зависимости
npm run <script>          # Запустить скрипт

CI/CD

GitHub Actions (pnpm)

- uses: pnpm/action-setup@v4
  with:
    version: 9

- uses: actions/setup-node@v4
  with:
    node-version: '20'
    cache: 'pnpm'

- run: pnpm install --frozen-lockfile

GitHub Actions (npm)

- uses: actions/setup-node@v4
  with:
    node-version: '20'
    cache: 'npm'

- run: npm ci

Чек-лист

  • В package.json указан packageManager
  • Lock-файл закоммичен в репозиторий
  • В CI используется --frozen-lockfile / npm ci
  • Добавлен preinstall hook для защиты от смешивания менеджеров
  • В README указаны команды для выбранного менеджера

Связанные стандарты