Стандарты
Пакетный менеджер
Стандарт выбора и использования пакетного менеджера в проектах.
Стандарт выбора и использования пакетного менеджера в проектах.
Основное правило
В рамках одного проекта используется только один пакетный менеджер.
Смешивание npm, pnpm, yarn в одном проекте приводит к:
- Конфликтам lock-файлов
- Разным версиям зависимостей у разных разработчиков
- Проблемам в CI/CD
Рекомендуемый менеджер
Для Nuxt-проектов рекомендуется pnpm:
| Критерий | pnpm | npm | yarn |
|---|---|---|---|
| Скорость установки | ⭐⭐⭐ | ⭐ | ⭐⭐ |
| Дисковое пространство | ⭐⭐⭐ | ⭐ | ⭐⭐ |
| Строгость зависимостей | ⭐⭐⭐ | ⭐ | ⭐⭐ |
| Совместимость с 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 |
|---|---|---|
| pnpm | pnpm-lock.yaml | НЕТ |
| npm | package-lock.json | НЕТ |
| yarn | yarn.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 - Добавлен
preinstallhook для защиты от смешивания менеджеров - В README указаны команды для выбранного менеджера