# @vigdorov/dev-configs Набор общих конфигов для TypeScript-проектов. Единые правила линтинга, форматирования, сборки и тестирования. ## Установка Добавь в `.npmrc` проекта: ```ini @vigdorov:registry=https://git.vigdorov.ru/api/packages/vigdorov/npm/ ``` Затем устанавливай нужные пакеты: ```bash npm i -D @vigdorov/prettier-config @vigdorov/eslint-config @vigdorov/typescript-config ``` --- ## Пакеты ### @vigdorov/prettier-config Единый стиль форматирования: 120 символов, 4 пробела, одинарные кавычки. ```js // prettier.config.js import config from '@vigdorov/prettier-config'; export default config; ``` ### @vigdorov/eslint-config ESLint 9 flat config. Три пресета: `base` (любой TS-проект), `react` (фронтенд), `node` (бэкенд). ```js // eslint.config.js — React-проект import {react} from '@vigdorov/eslint-config'; export default react(); ``` ```js // eslint.config.js — NestJS-проект import {node} from '@vigdorov/eslint-config'; export default node(); ``` Кастомизация через callback: ```js import {react} from '@vigdorov/eslint-config'; export default react((configs) => [ ...configs, { rules: { 'no-console': 'off', }, }, ]); ``` ### @vigdorov/typescript-config Базовые tsconfig для наследования. ```jsonc // tsconfig.json — React-проект { "extends": "@vigdorov/typescript-config/react", "compilerOptions": { "outDir": "dist", "rootDir": "src" }, "include": ["src"] } ``` ```jsonc // tsconfig.json — NestJS-проект { "extends": "@vigdorov/typescript-config/node", "compilerOptions": { "outDir": "dist", "baseUrl": "./" } } ``` ### @vigdorov/vite-config Конфиг Vite для SPA-приложений и библиотек. ```ts // vite.config.ts — SPA import {spa} from '@vigdorov/vite-config'; export default spa({ port: 5176, aliases: {'@': 'src'}, proxy: {'/api': 'http://localhost:3003'}, }); ``` ```ts // vite.config.ts — библиотека import {library} from '@vigdorov/vite-config'; export default library({ entry: 'src/index.ts', name: 'my-lib', external: ['react', 'react-dom'], }); ``` | Параметр (spa) | По умолчанию | Описание | |----------------|-------------|----------| | `port` | `5173` | Порт dev-сервера | | `aliases` | — | Алиасы путей (`{'@': 'src'}`) | | `proxy` | — | Проксирование запросов | | `base` | `'/'` | Base URL | | `outDir` | `'dist'` | Папка сборки | | Параметр (library) | По умолчанию | Описание | |--------------------|-------------|----------| | `entry` | — | Точка входа (обязательный) | | `name` | — | Имя библиотеки (обязательный) | | `aliases` | — | Алиасы путей | | `external` | `[]` | Зависимости, исключаемые из бандла | | `formats` | `['es', 'cjs']` | Форматы выходных файлов | ### @vigdorov/jest-config Jest с быстрой трансформацией через SWC. Алиасы в едином формате с Vite. ```ts // jest.config.ts import {jestConfig} from '@vigdorov/jest-config'; export default jestConfig({ environment: 'jsdom', aliases: {'@': 'src'}, }); ``` | Параметр | По умолчанию | Описание | |----------|-------------|----------| | `environment` | `'node'` | `'node'` для бэкенда, `'jsdom'` для фронтенда | | `aliases` | — | Алиасы путей (формат как в Vite) | > Папку `coverage/` нужно добавить в `.gitignore` проекта. ### @vigdorov/playwright-config E2E-тесты в трёх браузерах: Chromium, Firefox, WebKit. Автоматически адаптируется к CI-окружению. ```ts // playwright.config.ts import {playwrightConfig} from '@vigdorov/playwright-config'; export default playwrightConfig({ baseURL: 'http://localhost:5176', }); ``` | Параметр | По умолчанию | Описание | |----------|-------------|----------| | `baseURL` | — | URL приложения (обязательный) | | `testDir` | `'e2e'` | Папка с тестами | | `retries` | `0` (локально) / `2` (CI) | Количество ретраев | ### @vigdorov/knip-config Поиск неиспользуемого кода: файлы, экспорты, зависимости. Завершается с ошибкой если находит проблемы — используй в check-скрипте для блокировки сборки. ```ts // knip.config.ts import {knipConfig} from '@vigdorov/knip-config'; export default knipConfig({ entry: ['src/main.tsx'], }); ``` | Параметр | По умолчанию | Описание | |----------|-------------|----------| | `entry` | `['src/index.ts']` | Точки входа | | `project` | `['src/**/*.{ts,tsx,js,jsx}']` | Файлы проекта | | `ignore` | `['**/*.test.*', '**/*.spec.*', 'e2e/**', '**/*.d.ts']` | Игнорируемые паттерны | | `ignoreDependencies` | `[]` | Зависимости, которые не проверять | --- ## Рекомендуемые скрипты ```json { "scripts": { "dev": "vite", "build": "npm run check && vite build", "check": "knip", "lint": "eslint .", "lint:fix": "eslint . --fix", "format": "prettier --write src", "test": "jest", "e2e": "playwright test" } } ```