基于 mtab 的 Next.js 重写版本,目标是在保留原有路由形态、静态资源组织和业务兼容层的前提下,把项目迁移到更现代的 TypeScript / React / Next.js 工程体系中。
- 中文(默认)
- English
- Español
- Монгол
- ئۇيغۇرچە
- བོད་ཡིག
- العربية
- Français
bendy-nav-nextjs 不是对原项目的简单壳层包装,而是一个以 Next.js 15 + React 19 + TypeScript 为核心的新工程。
- 原始参考项目:
tsxcw/mtab - 当前项目定位:在 Node.js / Next.js 运行时中重建
mtab的主要能力,并保留 legacy 兼容入口,便于逐步迁移。 - 当前实现方式:
app/负责 Next.js 路由接入,src/server/legacy负责兼容原接口语义,public/、plugins/、resources/延续原项目的静态资产与插件资源组织。
根据原仓库公开目录和 composer.json 可以判断,原始 mtab 是一套以 PHP / ThinkPHP 风格单体应用 为核心的实现;当前仓库则是面向 Node.js 的 Next.js 重写。
| 维度 | 原始 mtab | 当前 bendy-nav-nextjs |
|---|---|---|
| 核心运行时 | PHP 单体应用 | Node.js + Next.js Route Handlers |
| Web 框架组织 | 传统服务端目录、静态资源目录、PHP 配置文件 | app/ 路由入口 + src/ 业务分层 + TypeScript 类型约束 |
| 路由接入 | 原项目路由体系 | app/page.tsx 接管新版首页,app/[...path]/route.ts 继续转发 legacy dispatcher |
| 前端工程 | 原项目历史前端资源与页面模板 | Next.js 工程承接,同时兼容 public/dist、app/view 等旧资源 |
| 配置方式 | 仓库内配置文件思路 | 以 .env / .env.local 为标准,旧 app.config.json 仅保留兼容兜底 |
| 数据访问 | 原项目服务端数据访问方式 | postgres Node 客户端 + TypeScript 配置读取 |
| 部署目标 | 更偏传统服务器 / 容器自托管 | 可部署到 Node 环境,也可接入 Vercel,但需注意文件写入限制 |
| 演进方式 | 功能集中在原单体中 | 通过 legacy 兼容层逐步拆分与重构 |
app/: Next.js 路由入口、首页页面与元数据文件。src/features/home: 新首页的 TypeScript 组件与样式实现。src/server/legacy: legacy 行为兼容层,承接原项目的接口与页面逻辑。src/server/infrastructure: 配置、数据库、缓存等基础设施。src/lib: 兼容导出层。scripts/: 开发、启动、数据库初始化、运行时辅助脚本。plugins/: 本地插件资源目录。public/: 静态资源、旧版前端产物、默认图片资源。docs/: 协议、服务条款与说明文档。
仓库已切换为 .env 规范。
- 推荐做法:复制
.env.example为.env,然后填写真实值。 - 已废弃做法:把数据库、SMTP、管理员密码直接写进
app.config.json。 - 兼容策略:代码仍会尝试读取旧
app.config.json,但仅作为过渡兜底,不建议继续使用。
| Variable | Required | Description |
|---|---|---|
PORT |
否 | 应用端口,默认 3000 / Application port, defaults to 3000 |
DATABASE_URL |
是 | PostgreSQL 连接串 / PostgreSQL connection string |
SMTP_EMAIL |
否 | 发信邮箱地址 / SMTP sender address |
SMTP_HOST |
否 | SMTP 主机 / SMTP host |
SMTP_PORT |
否 | SMTP 端口,默认 465 / SMTP port, defaults to 465 |
SMTP_PASSWORD |
否 | SMTP 密码 / SMTP password |
SMTP_SSL |
否 | 1 或 true 表示启用 SSL / Enables SSL when set to 1 or true |
SMTP_CODE_TEMPLATE |
否 | 邮件验证码模板 / Mail verification template |
ADMIN_EMAIL |
否 | 初始化管理员邮箱 / Bootstrap admin email |
ADMIN_PASSWORD |
否 | 初始化管理员密码 / Bootstrap admin password |
AUTH_CODE |
否 | 外部认证接入码 / Optional external auth code |
DEMO_MODE |
否 | true 时启用演示模式 / Enables demo mode when true |
- 安装依赖:
npm install - 复制模板:
cp .env.example .env或手动创建.env - 配置数据库:填写
DATABASE_URL - 初始化数据库:
npm run db:init - 启动开发环境:
npm run dev - 生产构建:
npm run build - 本地生产启动:
npm run start
默认访问地址为 http://127.0.0.1:3000。
Vercel 可以部署当前项目,但必须先理解它的边界。
- Next.js 路由与 Node.js 服务端逻辑
- PostgreSQL 连接
- 常规页面访问、接口访问、只读静态资源分发
- 通过环境变量注入配置
当前仓库仍保留多处 本地文件写入行为,例如:
runtime/目录临时文件public/static/exportsTabLink.jsonpublic/browserExt.zip- 运行时上传与导出文件
- 动态插件下载、解压和写入
plugins/
这些行为在传统服务器上没有问题,但在 Vercel 的无状态 / 临时文件系统 中会遇到以下问题:
- 写入内容不会长期持久化
- 多实例之间不会共享本地文件
- 部署后生成的文件可能在下一次冷启动或重新部署时消失
- 你把项目当作预览环境、演示环境或轻量只读环境
- 你已经把上传、导出、插件安装等写文件流程迁移到对象存储、数据库或外部持久化服务
- 你接受某些 legacy 文件写入功能在 Vercel 上需要二次改造
- 准备一个外部 PostgreSQL 数据库,例如 Neon、Supabase、RDS 或自建 Postgres。
- 在本地确认
.env已能正常启动项目。 - 将仓库导入 Vercel,新建 Project。
- 在 Vercel Project Settings -> Environment Variables 中配置与
.env相同的变量。 - 确认
DATABASE_URL、ADMIN_EMAIL、ADMIN_PASSWORD等关键变量已填写。 - 构建命令使用
npm run build。 - 安装命令使用默认
npm install即可。 - 输出类型保持 Next.js 默认检测,不需要额外指定静态导出目录。
- 首次部署后,确认数据库表结构已初始化;如未初始化,请在可访问数据库的环境中执行
npm run db:init。 - 如果你要在生产环境保留文件上传、插件安装、浏览器扩展打包等能力,请先把这些能力迁移出本地文件系统。
- 最稳妥方案:把当前项目视为“Next.js 服务层 + 外部 Postgres + 外部对象存储”架构。
- 不建议直接依赖 Vercel 本地文件系统保存用户上传、插件安装包或导出文件。
- 若要长期稳定运营,建议继续做两步重构:
- 第一步:把
runtime/和public/写入迁移到对象存储。 - 第二步:把插件安装与扩展打包流程拆成后台任务或独立服务。
- 第一步:把
本项目当前的重写策略不是“一次性彻底替换”,而是“通过 Next.js 承接入口,通过 legacy 层保证行为兼容”。因此你会在仓库中同时看到:
- 新的 Next.js / TypeScript 工程结构
- 保留下来的旧资源目录与 HTML 模板
- 面向迁移的路由分发与兼容实现
这也是为什么它既适合继续重构,也适合作为从原始 mtab 迁移到现代栈的中间层。
- 服务条款 / Terms: docs/SERVICE_TERMS.html
- 配置模板: .env.example
- 原始参考项目: mtab
- 原始参考项目
mtab使用MIT License。 - 当前仓库中的衍生实现应继续保留原项目所要求的版权与许可信息。
- 本项目与原始
mtab官方仓库之间不存在官方背书或从属关系。
English
bendy-nav-nextjs is a Next.js 15 + React 19 + TypeScript rewrite inspired by the original mtab project. The goal is to preserve legacy behavior while moving the runtime to a modern Node.js stack.
- Original
mtab: inferred from the upstream repository structure andcomposer.jsonto be a PHP / ThinkPHP-style monolith. - This repo: Next.js route handlers, TypeScript modules, Node.js PostgreSQL client, and a legacy compatibility layer.
- Configuration is now standardized around
.envand.env.local;app.config.jsonis deprecated.
- Install dependencies with
npm install. - Copy
.env.exampleto.env. - Fill in
DATABASE_URL. - Run
npm run db:init. - Start development with
npm run dev.
Vercel works for read-heavy or preview deployments, but this project still writes to local paths such as runtime/, public/, generated export files, and plugin folders. Those writes are ephemeral on Vercel, so production use should move them to object storage or another persistent service.
- Terms: docs/SERVICE_TERMS.html
- Env template: .env.example
- Upstream project: mtab
Español
bendy-nav-nextjs es una reescritura en Next.js 15 + React 19 + TypeScript basada en mtab. La meta es mantener la compatibilidad heredada y llevar el proyecto a un stack moderno de Node.js.
mtaboriginal: por la estructura pública del repositorio ycomposer.json, se puede inferir una arquitectura monolítica de estilo PHP / ThinkPHP.- Este proyecto: Route Handlers de Next.js, tipado en TypeScript, cliente PostgreSQL para Node.js y una capa
legacypara compatibilidad. - La configuración pasa a
.env;app.config.jsonqueda obsoleto.
- Instala dependencias con
npm install. - Copia
.env.examplea.env. - Completa
DATABASE_URL. - Ejecuta
npm run db:init. - Inicia con
npm run dev.
Vercel es válido para demos, previews o cargas principalmente de lectura. Sin embargo, el proyecto todavía escribe archivos en runtime/, public/, exportaciones y carpetas de plugins. En Vercel esos archivos no son persistentes, así que en producción conviene moverlos a almacenamiento externo.
Монгол
bendy-nav-nextjs нь mtab төслөөс санаа авч, Next.js 15 + React 19 + TypeScript дээр дахин бичсэн хувилбар юм. Зорилго нь хуучин үйлдлийг хадгалж, орчин үеийн Node.js инженерчлэл рүү шилжүүлэх явдал юм.
- Эх
mtab: нээлттэй репозиторийн бүтэц болонcomposer.json-оос харахад PHP / ThinkPHP төрлийн монолит бүтэцтэй. - Одоогийн төсөл: Next.js Route Handlers, TypeScript, PostgreSQL Node клиент, мөн
legacyнийцлийн давхарга ашиглана. - Тохиргоо нь одоо
.envстандарт руу шилжсэн;app.config.jsonхуучирсан.
npm install.env.exampleфайлыг.envболгон хуулна.DATABASE_URL-ээ бөглөнө.npm run db:initnpm run dev
Vercel дээр унших төвтэй preview болон demo байршуулалт хийхэд тохиромжтой. Гэхдээ төсөл runtime/, public/, экспортын файл, plugin хавтас руу бичдэг тул байнгын хадгалалт хэрэгтэй бол гадаад storage ашиглах шаардлагатай.
ئۇيغۇرچە
bendy-nav-nextjs بولسا mtab نى ئاساس قىلغان، Next.js 15 + React 19 + TypeScript ئارقىلىق قايتا يېزىلغان نەشرىدۇر. مەقسەت legacy خۇسۇسىيەتلەرنى ساقلاپ قېلىش ۋە لايىھىنى زامانىۋى Node.js قۇرۇلمىسىغا كۆچۈرۈش.
- ئەسلى
mtab: ئاشكارا repo قۇرۇلمىسى ۋەcomposer.jsonغا قارىغاندا PHP / ThinkPHP ئۇسلۇبىدىكى monolith. - نۆۋەتتىكى repo: Next.js route handler، TypeScript، PostgreSQL Node client ۋە legacy ماسلىشىش قەۋىتى.
- سەپلىمە
.envئۆلچىمىگە ئۆتتى؛app.config.jsonئەمدى تەۋسىيە قىلىنمايدۇ.
npm install.env.exampleنى.envغا كۆچۈرۈڭ.DATABASE_URLنى تولدۇرۇڭ.npm run db:initnpm run dev
Vercel preview ياكى demo ئۈچۈن ماس كېلىدۇ. بىراق بۇ لايىھە runtime/, public/, export ھۆججەتلىرى ۋە plugin قىسقۇچلىرىغا يېزىدۇ. بۇ خىل يېزىش Vercel دا ۋاقىتلىق بولىدۇ، شۇڭا ھەقىقىي ئىشلەپچىقىرىش مۇھىتىدا سىرتقى ساقلاش مۇلازىمىتى ئىشلىتىش كېرەك.
བོད་ཡིག
bendy-nav-nextjs ནི mtab ལས་བརྟེན་པའི Next.js 15 + React 19 + TypeScript སྒྱུར་བཅོས་གསར་པ་ཞིག་ཡིན། legacy སྤྱོད་ཚུལ་ཉར་ཞིང་ Node.js བཟོ་བཀོད་གསར་པར་སྤོ་བ་དེ་དགོས་དོན་ཡིན།
- སྔོན་གྱི
mtabནི repo གཞི་ཁྱོན་དངcomposer.jsonལས PHP / ThinkPHP ལྟ་བུའི monolith ཡིན་པ་བསྟན། - ད་ལྟའི repo ནི Next.js route handler, TypeScript, PostgreSQL Node client དང legacy མཐུན་སྒྲིག་བརྒྱུད་རིམ་ཡོད།
- སྒྲིག་འགོད་ནི
.envཚད་གཞིར་སྒྱུར་ཟིན་པསapp.config.jsonམུ་མཐུད་མི་བེད།
npm install.env.exampleནས.envདུ་བསྒྱུར།DATABASE_URLབསྐོངས།npm run db:initnpm run dev
Vercel ནི preview དང demo ལ་འཚམས། ཡིན་ནའང་ལས་གཞི་འདིས runtime/, public/, export ཡིག་ཆ་དང plugin folder ལ་འབྲི་བ་ཡོད། དེ་ཚོ Vercel ནང་མི་རྟག་པས production ལ་ཕྱི storage དགོས།
العربية
bendy-nav-nextjs هو إعادة كتابة لمشروع mtab باستخدام Next.js 15 + React 19 + TypeScript. الهدف هو الحفاظ على التوافق القديم ونقل المشروع إلى بنية Node.js حديثة.
- المشروع الأصلي
mtab: من بنية المستودع وملفcomposer.jsonيمكن الاستدلال على أنه تطبيق أحادي بأسلوب PHP / ThinkPHP. - هذا المشروع: يعتمد على Next.js Route Handlers و TypeScript وعميل PostgreSQL لـ Node.js مع طبقة
legacyللتوافق. - الإعدادات أصبحت تعتمد على
.env، بينماapp.config.jsonأصبح مساراً قديماً للتوافق فقط.
- شغّل
npm install - انسخ
.env.exampleإلى.env - املأ
DATABASE_URL - شغّل
npm run db:init - شغّل
npm run dev
Vercel مناسب للمعاينات أو العروض أو السيناريوهات التي تعتمد على القراءة. لكن المشروع ما زال يكتب ملفات إلى runtime/ و public/ وملفات التصدير ومجلدات الإضافات. هذه الملفات غير دائمة على Vercel، لذلك يوصى باستخدام تخزين خارجي في بيئة الإنتاج.
Français
bendy-nav-nextjs est une réécriture de mtab avec Next.js 15 + React 19 + TypeScript. L'objectif est de conserver la compatibilité legacy tout en migrant le projet vers une pile Node.js moderne.
mtabd'origine : la structure publique du dépôt etcomposer.jsonlaissent penser à une architecture monolithique de style PHP / ThinkPHP.- Ce dépôt : Route Handlers Next.js, modules TypeScript, client PostgreSQL Node.js et couche
legacyde compatibilité. - La configuration est désormais normalisée autour de
.env;app.config.jsonest déprécié.
npm install- Copiez
.env.examplevers.env - Renseignez
DATABASE_URL - Lancez
npm run db:init - Démarrez avec
npm run dev
Vercel convient pour les previews, les démos ou les usages majoritairement en lecture. En revanche, le projet écrit encore dans runtime/, public/, les fichiers d'export et les dossiers de plugins. Ces écritures ne sont pas persistantes sur Vercel ; un stockage externe est donc recommandé en production.
