前端私活神器,nodejs+vue3+typescript全栈框架,

2 阅读6分钟

写这个的初衷是因为node还没用很成熟的标准化全栈解决方案,现行的Nuxt.js, 这种专注于服务端渲染的框架,后端能力偏弱。其余的vue-admin模板,全是仅前端的模板,缺少类似于 java若依phpfastadmin 的nodejs成熟方案。

于是就有了这个项目, 能够快速crud,节省很大一部分时间, 也能够让项目文件更清晰。节省下来的时间用来休息和摸鱼多好(不是让你接着内卷的)。 如果真的帮到了你的话,觉得这个项目还不错的话, 可以给我一个star, 也可以给我一个star, 也可以给我一个star, 重要的事情说三遍。

技术栈:后端Midway,前端vue3``element-plus,语言Ts,数据库:pgsql,缓存redis。 关于后端框架选择,koa.js等框架太自由,需要自己组装。而非常能打的nestjs,不支持esm,vite打包前端时必须为esm,ssr调用访问会出现各种问题。

目录结构

后端目录结构

复制代码

├──.husky git hooks钩子文件夹
├──.vscode vscode推荐配置文件夹
├── dist 后端打包文件夹
├──logs 日志文件夹
├──public 静态资源文件
│   ├── admin 后台静态资源
│   ├── index 前台静态资源
├── src  后端主目录
│   ├── app 后端模块根目录
│   │   ├──admin 后台接口模块
│   │   │   ├── controller 模块控制器文件夹
│   │   │   ├── dto 模块出入参dto类文件夹
│   │   │   ├── middleware 模块中间件夹
│   │   │   └── service 模块service文件夹
│   │   ├──index 前台接口模块
│   │   │   ├── controller 模块控制器文件夹
│   │   │   ├── dto 模块出入参dto类文件夹
│   │   │   ├── middleware 模块中间件夹
│   │   │   └── service 模块service文件夹
│   │   └──home.controller.ts 页面渲染控制器
│   ├── config 配置文件夹
│   ├── controller 公共控制器文件夹
│   ├── decorators 装饰器文件夹
│   ├── dict 字典文件夹
│   ├── dto 出入参dto基类文件夹
│   ├── entities 数据库实体类文件夹
│   ├── fileManage 文件夹管理助手类
│   ├── filter 异常类文件夹
│   ├── helper 助手函数文件夹
│   ├── locales 后端多语言文件包
│   ├── response 反参基类
|   ├── ruleType 后端自定义校验规则
|   ├── service 全局公共service
|   ├── types 类型扩展
|   ├── configuration.ts 启动文件
│   └── logger.ts logger初始化文件
├── uploadFile 本地上传目录
├── view 前端文件夹
├── .env env环境变量,VIEW_ADMIN_开头的可被 前端admin项目获取到,VIEW_INDEX_开头的可被前端 index项目获取到
├── .env.prod 启动后env环境变量
├── .eslintrc.json eslint配置文件
├── .gitignore git 忽略文件
├── .npmrc pnpm配置文件
├── .prettierignore prettier忽略文件
├── .prettierrc.cjs prettier配置文件
├── bootstrap.js 部署后bootstrap启动文件
├── meadmin.sql 初始化sql文件
├── pnpm-workspace.yaml pnpm workspace 配置
└── tsconfig.json typescript配置文件

前端目录结构

├── view 前端文件夹根目录
│   ├── admin 管理后台根目录
│   │   ├── dist 打包文件夹
│   │   ├── plugins vite插件
│   │   ├── public 公共静态资源目录
│   │   ├── src  主目录
│   │   │   ├── api 接口文件
│   │   │   ├── assets 资源文件
│   │   │   │   └── images 项目存放图片的文件夹
│   │   │   ├── components 公共组件(里面的组件会自动引入)
│   │   │   ├── config 配置文件夹
│   │   │   │   ├── index.ts 配置入口文件
│   │   │   │   ├── locale.ts 国际化配置
│   │   │   │   ├── login.ts  登录配置
│   │   │   │   └── theme.ts  主题配置
│   │   │   ├── dict  字典
│   │   │   ├── directives 指令(里面的指令会自动引入)
│   │   │   ├── event 事件
│   │   |   ├── hooks 公共hooks
│   │   │   ├── icons 图标
│   │   │   │   ├── svg  svg图标文件夹(放入此文件夹的svg会被自动注册图标组件)
│   │   │   │   └── index.ts 图标自动注册入口文件
│   │   │   ├── layout 布局文件
│   │   │   ├── locales  国际化
│   │   │   │   └── lang 全局语言包
│   │   │   ├── router  路由配置
│   │   │   │   └── guard 路由全局守卫
│   │   │   ├── store  pinia文件夹
│   │   |   ├── styles 样式文件 
│   │   │   ├── utils  工具类
│   │   │   ├── views  页面
│   │   │   ├── entry-client.ts 客户端渲染入口文件
│   │   │   ├── entry-server.ts 服务端渲染入口文件(管理后台,暂不支持服务端渲染)
│   │   │   └── main.ts 入口文件
│   │   ├── template自动生成模板
│   │   ├── types  类型文件
│   │   └── vite.config.ts vite配置文件
│   ├── index 前台根目录
│   │   ├── dist 打包文件夹
│   │   ├── mock mock文件夹
│   │   ├── plugins vite插件
│   │   ├── public 公共静态资源目录
│   │   ├── src  主目录
│   │   │   ├── api 接口文件
│   │   │   ├── assets 资源文件
│   │   │   │   └── images 项目存放图片的文件夹
│   │   │   ├── components 公共组件(里面的组件会自动引入)
│   │   │   ├── config 配置文件夹
│   │   │   │   ├── index.ts 配置入口文件
│   │   │   │   └── login.ts  登录配置
│   │   │   ├── dict  字典
│   │   │   ├── directives 指令(里面的指令会自动引入)
│   │   │   ├── event 事件
│   │   |   ├── hooks 公共hooks
│   │   │   ├── icons 图标
│   │   │   │   ├── svg  svg图标文件夹(放入此文件夹的svg会被自动注册图标组件)
│   │   │   │   └── index.ts 图标自动注册入口文件
│   │   │   ├── layout 布局文件
│   │   │   ├── router  路由配置
│   │   │   │   ├── guard 路由全局守卫
│   │   │   │   └── routes 动态路由文件夹
│   │   │   ├── store  pinia文件夹
│   │   |   ├── styles 样式文件 
│   │   │   ├── utils  工具类
│   │   │   ├── views  页面
│   │   │   ├── entry-client.ts 客户端渲染入口文件
│   │   │   ├── entry-server.ts 服务端渲染入口文件
│   │   │   └── main.ts 入口文件
│   │   ├── template自动生成模板
│   │   ├── types  类型文件
└── └── └── vite.config.ts vite配置文件

核心功能:一键 CRUD,告别重复劳动

你只需要在 src/entities/ 下写好数据库实体(Entity),执行一条命令:

pnpm meadmin crud exampleDemo --menu

它会自动生成 12 个文件,覆盖前后端全链路:

后端生成:

  • dto/example/demoCreate.dto.ts —— 新增参数校验
  • dto/example/demoUpdate.dto.ts —— 更新参数校验
  • dto/example/demoQuery.dto.ts —— 查询参数校验(分页、模糊搜索)
  • service/example/demo.service.ts —— CRUD 业务逻辑
  • controller/example/demo.controller.ts —— 增删改查接口,自带 Swagger 文档

前端生成(Vue 3):

  • api/example/demo.ts —— 接口调用封装
  • views/example/demo/index.vue —— 列表页(带搜索、分页、操作按钮)
  • views/example/demo/components/info.vue —— 详情页
  • views/example/demo/components/addOrUp.vue —— 新增/编辑弹窗
  • views/example/demo/dict.ts —— 前端字典
  • views/example/demo/lang/en.json —— 多语言文件

而且--menu 参数还会自动在后台菜单表里插入一条菜单记录,刷新页面,左侧菜单直接出现!

你只需要写一个 Entity,剩下的——接口、校验、列表页、表单页、菜单——全自动生成。写实体,跑命令,点菜单,开改业务逻辑,就这么简单。


功能特性

  • 最新技术栈:基于 Vue3、Vite5、TypeScript、Pinia、Element-Plus、Vue-request 等最新技术栈开发,后端基于 Midway + PostgreSQL + Redis
  • 一键 CRUD:命令行一键生成控制器、模型、视图和接口文件,同时可一键生成后台菜单权限
  • 按需引入:组件自动按需引入,type 自动生成,打包体积更小
  • 服务端渲染(SSR) :集成 @medamin/midway-vite-view,Vite + Vue 服务端渲染开箱即用,SEO 友好
  • 参数校验:集成 @midwayjs/validate,基于 Joi,支持手机号等自定义规则
  • 多语言:集成 @midwayjs/i18n,支持国际化
  • 缓存:集成 Redis + Cache-Manager,开箱即用
  • 日志:统一输出到 logs 目录,调试生产一致
  • 开源免费:无任何加密,无需授权即可商业使用
  • 灵活插件:支持插件机制,功能可快速扩展

快速开始

环境准备

  • Node.js ≥ 22.14.0
  • PostgreSQL
  • Redis
  • pnpm

一键安装

bash

lua
 体验AI代码助手
 代码解读
复制代码
pnpm create meadminjs

按提示配置数据库等信息,项目自动创建完成。

本地启动

bash

 体验AI代码助手
 代码解读
复制代码
pnpm dev
  • 后台访问:http://127.0.0.1:7001/admin
  • 前台访问:http://127.0.0.1:7001/

默认账户

  • 后台:admin / meAdmin#202507!P
  • 前台:test / 123456789

编写实体,一键生成 CRUD

  1. 在 src/entities/ 下定义实体文件(如 exampleDemo.entity.ts
  2. 同步数据库结构:pnpm meadmin sync exampleDemo
  3. 一键生成crud:pnpm meadmin crud exampleDemo --menu

完成!刷新后台,菜单已出现,完整的增删改查页面可直接使用。

最后

Me-Admin 不仅仅是一个后台管理模板,它是一套完整的全栈开发方案。它把重复劳动交给命令行,把复杂配置交给封装,把真正的价值创造留给你。

如果你正在寻找一个能快速搭建企业级应用的框架,或者厌倦了手写 CRUD 的重复劳动,不妨试试 Me-Admin。

推荐的开源项目已发布到 GitHub ,欢迎 Star:
github.com/meadmin-cn/…

项目文档:
www.meadmin.cn/aon/doc/

官方网站:
www.meadmin.cn