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

Как установить проект без devDependencies?

1.8 Middle🔥 111 комментариев
#Инструменты и DevOps

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

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

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

Как установить проект без devDependencies?

Часто нужно установить зависимости проекта БЕЗ инструментов разработки (тестирование, линтинг, сборка и т.д.). Это нужно для production окружения, чтобы снизить размер node_modules и ускорить деплой.

Метод 1: npm install --production

Это самый простой и популярный способ.

# Установить только production зависимости
npm install --production

# Или альтернативный флаг
npm install --omit=dev

Что происходит:

  • Устанавливаются только пакеты из "dependencies" в package.json
  • Пакеты из "devDependencies" НЕ устанавливаются
  • Размер node_modules значительно меньше

Пример package.json

{
  "dependencies": {
    "react": "^19.0.0",
    "next": "^16.0.0",
    "axios": "^1.6.0"
  },
  "devDependencies": {
    "@types/node": "^20.0.0",
    "typescript": "^5.0.0",
    "eslint": "^8.0.0",
    "jest": "^29.0.0",
    "prettier": "^3.0.0"
  }
}
# npm install --production установит:
# react, next, axios

# НЕ установит:
# @types/node, typescript, eslint, jest, prettier

Метод 2: NODE_ENV переменная

Часто используется при деплое.

# Linux/Mac
NODE_ENV=production npm install

# Windows (PowerShell)
$env:NODE_ENV='production'; npm install

# Windows (cmd)
set NODE_ENV=production && npm install

Как это работает:

  • npm проверяет переменную NODE_ENV
  • Если она = production, устанавливает только production зависимости
  • Это поведение по умолчанию для npm

Метод 3: npm ci --production

Для CI/CD окружения (более надёжно, чем npm install).

# Установить точные версии из package-lock.json без dev зависимостей
npm ci --production

# Или
npm ci --omit=dev

Разница npm install vs npm ci:

  • npm install - обновляет package-lock.json если нужно
  • npm ci - использует точные версии из package-lock.json
  • npm ci более стабилен и надёжен для CI/CD

Метод 4: Selective dependency installation

Если ты используешь monorepo или нужны не все пакеты.

# Установить конкретные пакеты
npm install package1 package2 package3

# Установить пакет в production
npm install package-name --save

# Установить пакет в dev
npm install package-name --save-dev

Pnpm альтернатива

Если используешь pnpm:

# Установить без dev зависимостей
pnpm install --prod

# Или
pnpm install --production

Yarn альтернатива

Если используешь yarn:

# Установить без dev зависимостей
yarn install --production

# Или (yarn 2+)
yarn install --mode=production

Практический пример: Docker

Часто используется при сборке Docker образа.

# Dockerfile
FROM node:20-alpine

WORKDIR /app

# Копировать package файлы
COPY package*.json ./

# Stage 1: Установить ВСЕ зависимости для сборки
RUN npm install

# Собрать приложение
RUN npm run build

# Stage 2: Production образ
FROM node:20-alpine

WORKDIR /app

COPY package*.json ./

# Установить ТОЛЬКО production зависимости
RUN npm install --production

# Копировать собранное приложение из stage 1
COPY --from=0 /app/.next ./.next
COPY --from=0 /app/public ./public

# Стартовать приложение
CMD ["npm", "start"]

Почему это хорошо:

  • Первый образ большой (со всеми dev зависимостями)
  • Второй образ маленький (только production зависимости)
  • Финальный образ для деплоя маленький и быстрый

CI/CD Pipeline пример

# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v3
      
      - uses: actions/setup-node@v3
        with:
          node-version: '20'
      
      # Build step: нужны все зависимости
      - run: npm install
      - run: npm run build
      - run: npm run test
      
      # Production: без dev зависимостей
      - run: npm install --production
      
      # Деплой
      - run: npm start

Что попадёт в production

node_modules/
├── react/
├── next/
├── axios/
├── ... другие production зависимости

ПОПУЛЯРНЫЕ devDependencies (которые НЕ будут установлены):
├── typescript
├── eslint
├── prettier
├── jest
├── vitest
├── @types/*
├── webpack
├── babel
├── postcss
├── tailwindcss (для разработки, если не нужен runtime)

Как проверить, что devDependencies не установлены

# Посмотреть что установилось
ls node_modules/

# Проверить через npm
npm list --production

# Должны видеть ТОЛЬКО production пакеты
npm list

Потенциальные проблемы и решения

Проблема 1: Код зависит от devDependency

// Это неправильно!
import { render } from '@testing-library/react'; // devDependency!

export function MyComponent() {
  // ...
}

Решение: Перемести в dependencies

npm install @testing-library/react --save

Проблема 2: TypeScript не компилируется

Если TypeScript в devDependencies, но нужен для production:

# Перемести TypeScript в dependencies
npm uninstall --save-dev typescript
npm install --save typescript

Проблема 3: Переменные окружения не работают

Если приложение использует dotenv:

# dotenv должен быть в dependencies
npm install dotenv

Оптимизация размера

# Просмотри размер node_modules
du -sh node_modules/

# Найди тяжёлые пакеты
npm list --depth=0

# Удали неиспользуемые зависимости
npm prune

# С production флагом
npm prune --production

Best Practices

1. Используй package-lock.json

# Всегда коммитьте package-lock.json
git add package-lock.json

2. Регулярно проверяй зависимости

# Найди уязвимости
npm audit

# Обновись
npm audit fix

3. Используй npm ci для CI/CD

# В CI/CD пайплайне всегда
npm ci --production

4. Проверяй что устанавливается

# Перед деплоем
npm ls --production

Размер разницы

С devDependencies:
node_modules/ -> ~500MB

Без devDependencies:
node_modules/ -> ~50MB

В контейнере разница критична для скорости деплоя и холодного старта!

Вывод

Для установки проекта без devDependencies используй:

# Самый простой способ
npm install --production

# Или для CI/CD
npm ci --production

# Или установи NODE_ENV
NODE_ENV=production npm install

Это снизит размер node_modules в 5-10 раз и ускорит деплой на production!