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>
This commit is contained in:
211
README.md
Normal file
211
README.md
Normal file
@ -0,0 +1,211 @@
|
||||
# @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"
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user