Разработка пакета
Клонирование и установка
git clone https://gitlab.com/diealltagsfeen/frontend.npm.serviceslibrary.git
cd frontend.npm.serviceslibrary
npm installТокены для работы с реестром уже прописаны в .npmrc репозитория — дополнительная настройка не требуется.
Структура проекта
Пакет полностью на TypeScript. Барель-файлов нет — src/index.ts перечисляет экспорты явно, по одному символу из своего файла.
src/
├── config.ts # init() и доступ к зависимостям (axios, hosts, колбэки)
├── index.ts # Главный экспорт (явный перечень re-export'ов)
├── http/ # HTTP-клиент и типы результата (http, ApiResult, ApiError, ...)
├── services/ # API-сервисы (clientService, workerService и т.д.)
└── dto/ # DTO по доменам (client/, worker/, common/, ...) — типы запросов и ответовGit-воркфлоу
Ветвление
master— стабильная ветка для релизовdevelop— основная ветка разработкиfeature/*— фичевые ветки, создаются отdevelop
Внесение изменений
- Создайте ветку от
develop:bashgit checkout develop git pull git checkout -b feature/DIE-XXXX - Внесите правки
- Закоммитьте и запушьте:bash
git add . git commit -m "DIE-XXXX - Описание изменений" git push -u origin feature/DIE-XXXX - Создайте Merge Request в
developчерез GitLab
Добавление нового сервиса
За образец берите любой существующий сервис в src/services/ (например clientService.ts). Кратко:
Создайте файл
src/services/myService.ts. Сервис — тонкая обёртка надhttp, метод возвращаетApiResult<T>:ts/** @module myService */ import type { ApiResult } from '../http/ApiResult' import { http } from '../http/httpClient' import type { CreateMyEntityRequestDto } from '../dto/myEntity/CreateMyEntityRequestDto' /** @alias module:myService */ class MyService { /** Получает список сущностей с пагинацией и фильтрами */ async GetTable(queryString: string): Promise<ApiResult> { return await http.get('business', `Api/MyEntity?${queryString}`) } /** Создаёт новую сущность */ async Create(body: CreateMyEntityRequestDto): Promise<ApiResult> { return await http.post('business', 'Api/MyEntity', body) } } export const myService = new MyService()Добавьте явный реэкспорт в
src/index.ts:tsexport * from './services/myService'
Добавление DTO
- Создайте файл
src/dto/<домен>/MyTypeDto.tsсinterface/enumи JSDoc к полям. - Добавьте явный реэкспорт в
src/index.ts(export * from './dto/<домен>/MyTypeDto').
Сборка
npm run buildСкрипт build последовательно запускает lint, typecheck и vite build. Vite собирает src/index.ts в единый ES-модуль dist/index.js и генерирует типы (dist/src/index.d.ts). Зависимость axios не бандлится — указана как external.
Релиз новой версии
После мержа изменений в develop, публикация выполняется одной командой:
npm run release:patch # баг-фиксы (1.1.0 → 1.1.1)
npm run release:minor # новый функционал (1.1.0 → 1.2.0)
npm run release:major # ломающие изменения (1.0.0 → 2.0.0)Команда автоматически:
- Соберёт пакет (
npm run build) - Обновит версию в
package.jsonи создаст git-коммит с тегом - Опубликует пакет в реестр (
npm publish) - Запушит коммит и тег в репозиторий
Токен для публикации
Для публикации необходим токен с правами на запись. Этот токен создаёт и выдаёт по запросу Owner репозитория. Самостоятельно создать его нельзя.
Обновление пакета в проектах-потребителях
После публикации новой версии:
npm update @diealltagsfeen/frontend-api-clientИли конкретная версия:
npm install @diealltagsfeen/frontend-api-client@1.2.0Локальная разработка с проектом-потребителем
Для тестирования изменений без публикации можно использовать npm link или настроить alias в quasar.config.js проекта-потребителя (см. скилл api_service_dev).