---
title: "Что такое TeqFW?"
description: "TeqFW — JavaScript-платформа для модульных веб-приложений малого и среднего масштаба, создаваемых небольшими командами."
date: 2024-04-29
---

TeqFW — сокращение от Tequila Framework, фреймворк для веб-приложений на
чистом JavaScript. Это не попытка соперничать с крупными платформами
вроде Angular, Laravel или Django, а практический эксперимент: может ли
один разработчик или небольшая full-stack-команда уверенно создавать
приложения для малого и среднего бизнеса.

## Один язык для всей логики

HTML и CSS необходимы, но программная логика веба может быть на одном
языке — JavaScript. Node.js позволил писать серверный и браузерный код в
одной экосистеме. Для меня это означает меньше переключений контекста и
больше практики в одном инструменте: лучше хорошо владеть одним языком
на фронтенде и бэкенде, чем поверхностно — несколькими.

## JSDoc вместо трансляции

Транспиляция удобна, но исполняемый в браузере код при этом отличается
от исходника в IDE. Это усложняет отладку и сопровождение. TeqFW
предпочитает использовать тот же JavaScript, который будет выполнен, а
структуру данных и контракты описывать с помощью
[JSDoc](https://jsdoc.app/). Он помогает навигации и рефакторингу, не
ограничивая возможности языка и не добавляя шаг сборки.

## Внедрение зависимостей

Центральный элемент — [контейнер
зависимостей](https://github.com/teqfw/di), работающий и в браузере, и в
Node.js. Связывание объектов во время запуска уменьшает жёсткую
связанность, упрощает тестирование и позволяет переопределять базовую
функцию плагином или обёрткой без правки исходного кода.

В TeqFW пространство имён, ES-модули и DI разделяют код на три области:

- **Back** — только сервер: Node.js и серверные npm-пакеты;
- **Front** — только браузер: веб-ресурсы и клиентская логика;
- **Shared** — общий код, который по возможности связывается через DI.

## Повторное использование

Код организован в npm-пакеты и собирается обычным `package.json`.
Базовые пакеты — [@teqfw/di](https://github.com/teqfw/di) и
[@teqfw/core](https://github.com/teqfw/core). По задаче подключаются
[@teqfw/db](https://github.com/teqfw/db),
[@teqfw/web](https://github.com/teqfw/web),
[@teqfw/i18n](https://github.com/teqfw/i18n) и другие.

Например, приложение с пользовательской и административной частью может
состоять из `@app/base` с общими моделями, `@app/client` и `@app/admin`.
Общие решения, такие как аутентификация, выделяются в самостоятельные
пакеты. Такой подход обычен для Node.js, но менее привычен для
браузерного кода, который часто собирают в большие бандлы.

## Архитектура приложения

TeqFW рассчитан на приложения с небольшой или умеренной нагрузкой,
которыми владеет одна-две команды, преимущественно для мобильного
браузера. PWA, Service Worker, Cache Storage, IndexedDB и Web Push
переносят подходящую обработку и кэширование ближе к пользователю.

<zoom-img src="/medium/img/f84ab4c66abf/image-01.png" alt="Типичная архитектура приложения TeqFW" width="100%"></zoom-img>

Общие данные могут храниться на сервере в реляционной базе, личные —
кэшироваться в IndexedDB браузера, а обработка распределяется между
фронтендом и бэкендом. Это не набор микросервисов, а модульный монолит:
фактически два самостоятельных приложения, собранных из совместимых
пакетов.

## Данные и изменяемость

Для реляционных БД TeqFW использует DBAL-слой на базе Knex.js. Каждый
пакет описывает свой фрагмент схемы, а приложение собирает их в Domain
Entities Map и создаёт нужную структуру базы. Так один пакет может
сочетаться с разными моделями пользователей в разных приложениях.

Главная цель платформы — изменяемость кода: быстро понять отдельный
фрагмент и добавить новую возможность, не ломая существующую. Этому
служат DI, декомпозиция, соглашения об аргументах и структуры
исходников. Скорость исполнения и идеальная обратная совместимость здесь
не абсолютные приоритеты: приложение может фиксировать проверенные
версии пакетов.

## Вывод

TeqFW исследует модульную разработку современных веб-приложений на
JavaScript для индивидуальных разработчиков и небольших команд. В его
экосистеме есть пакеты для DI, запуска Node.js-приложений, баз данных,
почты, веб-сервера, HTTP/SSE/Web Push, Vue, Quasar и локализации. Они
уже применяются в личных и коммерческих проектах; наиболее зрелым
компонентом остаётся [@teqfw/di](https://github.com/teqfw/di).
