Files
dev-configs/README.md
vigdorov cf64bf6d7d feat: initial dev-configs monorepo
Shared configs for TypeScript projects: ESLint, Prettier, TypeScript,
Vite, Jest, Playwright, Knip. Published as @vigdorov/* npm packages
to Gitea registry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 23:40:22 +03:00

212 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# @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 — Node/NestJS-проект
{
"extends": "@vigdorov/typescript-config/base",
"compilerOptions": {
"outDir": "dist",
"rootDir": "src"
},
"include": ["src"]
}
```
### @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"
}
}
```