{"id":13676621,"url":"https://github.com/wkylin/pro-react-admin","last_synced_at":"2026-02-04T11:51:38.397Z","repository":{"id":37782714,"uuid":"356256080","full_name":"wkylin/pro-react-admin","owner":"wkylin","description":"融合了 React 19、Webpack 5、React Router 7、Antd 5、Typescript 5、Tailwindcss 4 及 Fetch Api 的企业级中台基础模板，为大规模系统提供技术底座，助力企业数字化转型...","archived":false,"fork":false,"pushed_at":"2025-05-08T12:04:17.000Z","size":714509,"stargazers_count":804,"open_issues_count":1,"forks_count":191,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-05-08T13:22:33.293Z","etag":null,"topics":["ai","antd","antd-design","antd5","chatpgt","eslint","i18n-react","i18next","jest","prettier","react","react-hooks","react-redux","reactrouter6","stylelint","typescript","vite","vitepress","webpack","webpack5"],"latest_commit_sha":null,"homepage":"https://pro-react-admin.vercel.app/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wkylin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-04-09T12:05:04.000Z","updated_at":"2025-05-08T12:04:05.000Z","dependencies_parsed_at":"2024-11-09T12:24:54.173Z","dependency_job_id":"0e2042e5-2c35-41ad-bd95-431b56416f60","html_url":"https://github.com/wkylin/pro-react-admin","commit_stats":{"total_commits":965,"total_committers":11,"mean_commits":87.72727272727273,"dds":0.3398963730569948,"last_synced_commit":"08a7ffc08ac7d88300d04ac15e36e5880514431b"},"previous_names":["wkylin/promotion-web"],"tags_count":10,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wkylin%2Fpro-react-admin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wkylin%2Fpro-react-admin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wkylin%2Fpro-react-admin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wkylin%2Fpro-react-admin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wkylin","download_url":"https://codeload.github.com/wkylin/pro-react-admin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254254042,"owners_count":22039792,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","antd","antd-design","antd5","chatpgt","eslint","i18n-react","i18next","jest","prettier","react","react-hooks","react-redux","reactrouter6","stylelint","typescript","vite","vitepress","webpack","webpack5"],"created_at":"2024-08-02T13:00:30.508Z","updated_at":"2026-02-04T11:51:38.389Z","avatar_url":"https://github.com/wkylin.png","language":"JavaScript","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/f4d9bf1d-f45f-4c98-8bde-8c0b7144a120\" alt=\"logo\" height=\"120\" /\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/checks-status/wkylin/pro-react-admin/main\" alt=\"check-status\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/workflow/status/wkylin/pro-react-admin/CodeQL\" alt=\"build status\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/package-json/v/wkylin/pro-react-admin\" alt=\"version-status\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/wkylin/pro-react-admin\" alt=\"license\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/contributors/wkylin/pro-react-admin\" alt=\"contributors\" /\u003e\n  \u003ca href=\"https://deepscan.io/dashboard#view=project\u0026tid=16370\u0026pid=24083\u0026bid=739580\"\u003e\u003cimg src=\"https://deepscan.io/api/teams/16370/projects/24083/branches/739580/badge/grade.svg\" alt=\"DeepScan grade\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://deepwiki.com/wkylin/pro-react-admin\"\u003e\u003cimg src=\"https://deepwiki.com/badge.svg\" alt=\"Ask DeepWiki\" /\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n## \u003cspan role=\"img\" aria-label=\"rocket\"\u003e🚀\u003c/span\u003e Pro React Admin\n\n**Pro React Admin** 是一款基于 **React v19** 的高性能、企业级中后台前端解决方案。具备双重架构设计，既是完整的企业级应用，也是可发布的组件库 @w.ui/wui-react。 深度整合 **RBAC 动态权限**、**KeepAlive 缓存**、**多标签页**与 **AI 智能助手**。提供开箱即用的国际化、暗黑模式、Mock 数据与 E2E 测试体系，助力开发者快速构建稳健、安全的 SaaS 平台与数据可视化系统。\n\n---\n\n## \u003cspan role=\"img\" aria-label=\"globe\"\u003e🌐\u003c/span\u003e 在线预览\n\n- **主应用 (Main App)**: [https://wkylin.github.io/pro-react-admin/](https://wkylin.github.io/pro-react-admin/)\n- **主应用 (Vercel App)**: [https://pro-react-admin.vercel.app/](https://pro-react-admin.vercel.app/)\n- **组件文档 (Storybook)**: [https://wkylin.github.io/pro-react-admin/storybook/](https://wkylin.github.io/pro-react-admin/storybook/)\n- **导航页 (Portal)**: [https://wkylin.github.io/pro-react-admin/portal.html](https://wkylin.github.io/pro-react-admin/portal.html)\n\n---\n\n## \u003cspan role=\"img\" aria-label=\"trophy\"\u003e🏆\u003c/span\u003e 项目亮点\n\n- **\u003cspan role=\"img\" aria-label=\"rocket\"\u003e🚀\u003c/span\u003e 极致性能体验**：基于 **React 19** 构建，重构 `KeepAlive` 缓存机制（采用 CSS 显隐策略替代 DOM 移动，大幅减少重排），配合 `useTransition` 实现丝滑的 Tab 切换与交互响应。\n- **\u003cspan role=\"img\" aria-label=\"puzzle\"\u003e🧩\u003c/span\u003e 丰富组件生态**：沉淀 **120+** 高质量业务组件，支持 **独立打包发布 (@w.ui/wui-react)**。集成 **Storybook** 实现组件可视化开发与文档管理，显著提升复用效率。\n- **\u003cspan role=\"img\" aria-label=\"shield\"\u003e🛡️\u003c/span\u003e 企业级权限体系**：完善的 **RBAC** 模型，支持路由、菜单、按钮级细粒度权限控制。内置路由自动过滤、`useSafeNavigate` 防越权跳转，保障系统安全。\n- **\u003cspan role=\"img\" aria-label=\"zap\"\u003e⚡️\u003c/span\u003e 前沿技术栈**：采用 **TypeScript v5** + **Ant Design v6** + **Vite v7/Webpack v5** 双构建模式，紧跟社区最新标准，提供最佳开发体验。\n- **\u003cspan role=\"img\" aria-label=\"layers\"\u003e🧩\u003c/span\u003e 多项目模式（共享依赖）**：通过 `PROJECT` 环境变量在同一仓库/同一套依赖（一个 `node_modules`）下承载多个业务项目；支持项目级入口与路由覆盖，按项目输出产物目录（`dist` / `dist-\u003cproject\u003e`），新项目仅需新增 `src/projects/\u003cproject\u003e` 业务代码。\n- **\u003cspan role=\"img\" aria-label=\"robot\"\u003e🤖\u003c/span\u003e AI 智能化集成**：内置 ChatGPT 演示（支持 SSE 流式响应）、Markmap 思维导图生成、Mermaid 流程图渲染，探索 AI 在后台管理中的应用场景。\n- **\u003cspan role=\"img\" aria-label=\"test-tube\"\u003e🧪\u003c/span\u003e 全链路质量保障**：集成 **Playwright** E2E 自动化测试，配合 Mock Service Worker (MSW) 实现真实的网络模拟与多角色权限切换测试。\n- **\u003cspan role=\"img\" aria-label=\"mobile\"\u003e📱\u003c/span\u003e 极致移动端适配**：精心打磨的响应式布局，从 PC 到手机端提供一致的流畅体验。\n\n- **\u003cspan role=\"img\" aria-label=\"gear\"\u003e⚙️\u003c/span\u003e CI/CD 集成** ：GitHub Actions：自动构建部署到 GitHub Pages. Sentry 集成：可选的错误监控与源码上传\n\n---\n\n## \u003cspan role=\"img\" aria-label=\"key\"\u003e🔑\u003c/span\u003e 核心功能\n\n- \u003cspan role=\"img\" aria-label=\"locked\"\u003e🔐\u003c/span\u003e **动态权限引擎**：登录后根据角色（Admin/Manager/Business/User）自动生成路由表，非权限路由自动拦截（403/404）。\n- \u003cspan role=\"img\" aria-label=\"bookmark-tabs\"\u003e📑\u003c/span\u003e **高性能多标签页**：支持 `ProTabs` 多页签切换，状态持久化保持，支持右键菜单（关闭其他/关闭所有/刷新）。\n- \u003cspan role=\"img\" aria-label=\"books\"\u003e📚\u003c/span\u003e **组件文档库**：集成 Storybook，提供 120+ 组件的交互式文档与预览，支持 Props 动态调试与独立测试。\n- \u003cspan role=\"img\" aria-label=\"satellite\"\u003e📡\u003c/span\u003e **健壮请求层**：封装统一请求库，支持并发控制、自动重试、取消重复请求、全局错误处理与消息去重。\n- \u003cspan role=\"img\" aria-label=\"bust-in-silhouette\"\u003e👤\u003c/span\u003e **登录/注册流程**：完整的登录鉴权流程，支持一键测试账号切换，实时同步权限状态。\n- \u003cspan role=\"img\" aria-label=\"bar-chart\"\u003e📊\u003c/span\u003e **数据可视化**：集成 ECharts、Recharts 等多种图表库，支持大数据量展示。\n- \u003cspan role=\"img\" aria-label=\"memo\"\u003e📝\u003c/span\u003e **富文本与文档**：支持 Markdown 实时渲染与编辑、代码高亮、数学公式解析。\n- \u003cspan role=\"img\" aria-label=\"clapper-board\"\u003e🎬\u003c/span\u003e **多媒体支持**：内置音频/视频播放器，支持 Tab 切换自动暂停/恢复播放，优化资源占用。\n- \u003cspan role=\"img\" aria-label=\"earth\"\u003e🌍\u003c/span\u003e **主题与国际化**：内置明亮/暗黑模式一键切换，支持多语言（i18n）动态切换。\n- \u003cspan role=\"img\" aria-label=\"test-tube\"\u003e🧪\u003c/span\u003e **Mock 数据模拟**：基于 Faker.js 和 MSW 的纯前端 Mock 方案，脱离后端独立开发。\n- \u003cspan role=\"img\" aria-label=\"package\"\u003e📦\u003c/span\u003e **组件库发布**：支持将 `src/components` 独立打包为 NPM 库 (`@w.ui/wui-react`)，提供 ESM/UMD 格式，支持按需加载与类型提示。\n- \u003cspan role=\"img\" aria-label=\"layers\"\u003e🧩\u003c/span\u003e **多项目模式（共享依赖）**：一个仓库 + 一个 `node_modules` 承载多个业务项目；通过 `PROJECT` 选择入口与路由，Vite/Webpack 均可按项目构建与预览，避免重复 clone/重复安装依赖。\n\n---\n\n## \u003cspan role=\"img\" aria-label=\"toolbox\"\u003e🧰\u003c/span\u003e 技术栈\n\n- \u003cspan role=\"img\" aria-label=\"atom\"\u003e⚛️\u003c/span\u003e **Core**: React v19 / TypeScript v5\n- \u003cspan role=\"img\" aria-label=\"art\"\u003e🎨\u003c/span\u003e **UI**: Ant Design v6\n- \u003cspan role=\"img\" aria-label=\"compass\"\u003e🧭\u003c/span\u003e **Router**: React Router v7\n- \u003cspan role=\"img\" aria-label=\"zap\"\u003e⚡\u003c/span\u003e **Build**: Vite v7 / Webpack v5\n- \u003cspan role=\"img\" aria-label=\"test-tube\"\u003e🧪\u003c/span\u003e **Test**: Playwright / Jest / Testing Library\n- \u003cspan role=\"img\" aria-label=\"test-tube\"\u003e🧪\u003c/span\u003e **Mock**: Mock Server（Faker/MSW）\n- \u003cspan role=\"img\" aria-label=\"straight-ruler\"\u003e📏\u003c/span\u003e **Lint**: ESLint / Prettier / Husky / Commitizen\n- \u003cspan role=\"img\" aria-label=\"magnifying-glass\"\u003e🔍\u003c/span\u003e **Quality**: Sentry / SonarQube / DeepScan\n- \u003cspan role=\"img\" aria-label=\"whale\"\u003e🐳\u003c/span\u003e **Deploy**: Docker / Nginx / Github Actions\n\n---\n\n## 📁 目录结构\n\n```text\npro-react-admin/\n├── src/\n│   ├── actions/           # Redux/Action 相关\n│   ├── assets/            # 静态资源\n│   ├── components/        # 业务组件\n│   ├── config/            # 配置文件\n│   ├── hooks/             # 自定义 hooks\n│   ├── i18n/              # 国际化\n│   ├── mock/              # Mock 数据\n│   ├── pages/             # 页面模块\n│   ├── reducers/          # Redux Reducer\n│   ├── routers/           # 路由配置\n│   ├── service/           # 请求与服务\n│   ├── store/             # 状态管理\n│   ├── styles/            # 全局样式\n│   ├── theme/             # 主题相关\n│   ├── utils/             # 工具函数\n│   ├── App.tsx            # 应用入口\n│   └── index.tsx          # 渲染入口\n├── public/                # 公共资源\n├── tests/                 # 测试用例\n├── docs/                  # 文档\n├── scripts/               # 脚本\n├── api/                   # Mock API 服务\n├── ...\n```\n\n---\n\n## 🚀 快速开始\n\n```bash\ngit clone https://github.com/wkylin/pro-react-admin.git\ncd pro-react-admin\nnpm install\nnpm run dev\n```\n\n## 🧩 多项目模式（共享依赖）\n\n多项目模式的目标是：把“模板工程 + 基础设施 + 依赖”沉淀成一个仓库，后续新业务只需要在 `src/projects/\u003cproject\u003e` 里新增业务代码。\n\n- 📘 详细文档： [多项目（Multi Project）模式](./docs/MULTI_PROJECT.md)\n\n### ✅ 快速上手\n\n项目通过环境变量 `PROJECT` 来选择当前项目（默认不传即主项目）。脚本已使用 `cross-env`，Windows/macOS/Linux 统一。\n\n- Webpack 启动 ProjectA：`npm run start:projectA`\n- Webpack 启动 ProjectB：`npm run start:projectB`\n- Webpack 构建 ProjectB：`npm run build:production:projectB`\n- Vite 启动 ProjectA：`npm run dev:vite:projectA`\n- Vite 启动 ProjectB：`npm run dev:vite:projectB`\n\n### 📁 目录约定\n\n```text\nsrc/projects/\n  \u003cproject\u003e/\n    index.tsx            # 项目入口（可复用通用 renderApp）\n    routers/             # 项目路由（可选，存在则覆盖主路由）\n      index.jsx\n      authRouter.jsx\n    pages/               # 项目页面（可选）\n    components/          # 项目组件（可选）\n    public/              # 项目静态资源（可选，构建时叠加到 public）\n```\n\n### 🧭 路由覆盖与复用策略\n\n- 默认情况下：`@routers` 指向 `src/routers`（主项目路由）。\n- 若存在 `src/projects/\u003cproject\u003e/routers/`：`@routers` 会指向项目路由，从而实现“同框架/同基础设施下的路由隔离”。\n- 示例：\n  - `projectA` 使用“转发主路由”的方式实现最大化复用。\n  - `projectB` 落地“独立路由 + 独立 pages/components”，并演示直接复用主项目组件（如 `@stateless/*`）。\n\n### 📦 产物目录与本地预览（dist 自动切换）\n\n多项目构建时输出目录采用约定：\n\n- 主项目：`dist/`\n- 项目构建：`dist-\u003cproject\u003e/`（例如 `dist-projectB/`）\n\n同时，`serve/http/clean` 相关脚本已改为自动指向当前项目的产物目录，避免手动切换路径。\n\n提示：运行 `npm run lighthouse` 前请先启动 dev server（例如先执行 `npm run dev`/`npm run start`）。\n\n### 🆕 如何新增一个新项目（推荐流程）\n\n1) 新建目录：`src/projects/\u003cyourProject\u003e/`\n2) 添加入口：`src/projects/\u003cyourProject\u003e/index.tsx`\n3) （可选）添加路由覆盖：`src/projects/\u003cyourProject\u003e/routers/index.jsx`\n4) 新增 pages/components 业务代码\n5) 复制一份脚本（参考 `projectA/projectB`）或直接使用 `cross-env PROJECT=\u003cyourProject\u003e ...` 启动/构建\n\n更多用法详见 [详细文档](./docs/README_PERMISSION.md) 与 [用户角色权限说明](./docs/USER_ROLE_PERMISSION.md)。\n\n---\n\n## 🧩 微前端（Webpack Module Federation）POC\n\n在“多项目模式”的基础上，仓库提供一个 **Webpack Module Federation** 的最小可运行 POC：\n\n- Shell(host) 统一承载与导航\n- projectA/projectB 以 remote 的形式被动态加载\n- 目标部署形态：**同域名不同 path**（例如 `/`、`/projectA/`、`/projectB/`）\n\n### ✅ 本地联调（3 个 devServer）\n\n1) 启动两个 remote：\n\n- `npm run start:mf:projectA`（默认 `http://localhost:8081/`，remoteEntry：`/remoteEntry.js`）\n- `npm run start:mf:projectB`（默认 `http://localhost:8082/`，remoteEntry：`/remoteEntry.js`）\n\n2) 启动 Shell(host)：\n\n- `npm run start:mf:shell`（默认 `http://localhost:8080/`）\n\n3) 访问：\n\n- `http://localhost:8080/#/portal`\n- `http://localhost:8080/#/projectA`\n- `http://localhost:8080/#/projectB`\n\n### 📦 生产构建与同域名不同 path 部署\n\n- Shell(host)：`npm run build:mf:shell` → 输出到 `dist-shell/`\n- projectA(remote)：`npm run build:mf:projectA` → 输出到 `dist-projectA/`\n- projectB(remote)：`npm run build:mf:projectB` → 输出到 `dist-projectB/`\n\n推荐的网关/Nginx 映射（示意）：\n\n- `/` → `dist-shell/`\n- `/projectA/` → `dist-projectA/`\n- `/projectB/` → `dist-projectB/`\n\n其中 remoteEntry 在生产默认按路径引用：\n\n- projectA：`/projectA/remoteEntry.js`\n- projectB：`/projectB/remoteEntry.js`\n\n说明：\n\n- 目前路由使用 Hash Router（`/#/...`），通常不依赖 history fallback。\n- 这是 POC：remote 暴露的是 `src/projects/\u003cproject\u003e/mfe/App.tsx` 对应的 `./App` 模块；Shell 通过 `import('projectA/App')` / `import('projectB/App')` 动态加载。\n\n---\n\n## 📝 近期主要更新\n\n- ⚡ **性能优化**：重构 `KeepAlive` 实现，支持 React 19 `\u003cActivity\u003e` (Offscreen) 原生冻结，降级模式采用 CSS 显隐替代 DOM 移动，大幅减少重排\n- 🎨 **体验优化**：`ProTabs` 切换引入 `useTransition`，交互响应更流畅；`global-loader` 移除逻辑优化，消除首屏白屏与卡顿\n- 🎬 **媒体控制**：音视频组件（MusicPlayer/Video）支持 Tab 切换自动暂停/恢复播放\n- 🛠️ **开发体验**：`KeepAlive` 支持 HMR 热更新，开发调试状态不丢失\n- 🛡️ **权限体系**：重构支持缓存、过期、强制刷新、单例获取，避免重复请求和竞态\n- 🛣️ **路由过滤**：路由与菜单权限自动过滤，首页对所有账号可见\n- 🔒 **安全跳转**：`useSafeNavigate`/`SafeLink` 封装，防止越权跳转\n- 📡 **请求重构**：支持并发/串行/重试/取消/全局错误处理\n- 🔔 **消息去重**：全局消息去重，避免重复弹窗干扰\n- 🎭 **Mock 增强**：多角色切换与权限同步\n- 🧪 **E2E 测试**：Playwright 核心场景覆盖\n- 📚 **文档完善**：文档与示例持续更新\n- **📦 组件库独立打包**: 新增 `@w.ui/wui-react` 组件库构建流程，支持 Vite Library Mode 打包 ESM/UMD 格式。\n- **🚀 发布流程自动化**: 集成 `standard-version` 版本管理与 NPM 发布脚本，支持 Scoped Package 发布。\n- **🎨 组件重构与优化**: 样式重构，适配移动端与暗黑模式。交互优化，支持自定义提示与自定义样式。规范化导出结构，修复模块解析问题。\n- **🛠️ 构建配置升级**: 完善 `vite.config.lib.ts`，配置路径别名 (`@assets`, `@hooks` 等) 与外部依赖，确保构建产物纯净。\n\n- **🧩 多项目模式（共享依赖）**：引入 `PROJECT` 环境变量，在同一仓库/同一套依赖（一个 `node_modules`）下承载多个业务项目；支持 **Vite / Webpack** 双构建链路按项目入口打包。\n- **🧭 项目级路由覆盖**：通过别名 `@routers` 支持项目覆盖主路由；示例 `projectB` 已落地独立 `routers/pages/components`，并演示复用主项目组件（`@stateless/*`）。\n- **🧰 dist 工具脚本**：`serve/http/clean` 相关脚本改为自动指向当前项目产物目录（`dist` / `dist-\u003cproject\u003e`），减少多项目场景下的重复维护。\n- **✅ 构建验证**：`npm run build:production:projectB` 产物输出到 `dist-projectB/`。\n\n---\n\n## 🏗️ 技术架构\n\n\u003cimg width=\"1903\" height=\"387\" alt=\"Snipaste_2025-12-31_09-14-38\" src=\"https://github.com/user-attachments/assets/915ba91a-8852-4dc0-8a14-091e781d9f04\" /\u003e\n\n**多项目架构补充说明（Multi Project）**\n\n- **入口约定**：默认入口为 `src/index.tsx`；项目入口为 `src/projects/\u003cproject\u003e/index.tsx`，通过 `PROJECT=\u003cproject\u003e` 切换。\n- **构建与产物**：Vite/Webpack 均支持按项目构建，产物目录采用 `dist` / `dist-\u003cproject\u003e` 的约定，便于部署与本地预览。\n- **路由隔离与复用**：`@routers` 指向 `src/routers` 或 `src/projects/\u003cproject\u003e/routers`（存在即覆盖）；从而实现“同一套基础设施 + 项目级路由差异”。\n- **示例项目**：`projectA` 以“转发主路由”演示复用；`projectB` 以“独立路由 + 独立页面/组件”演示隔离与复用并存。\n\n---\n\n## 🦄 脚手架--白泽 baize\n\n\u003e **白泽**，中国古代神话中的瑞兽。能言语，通万物之情，知鬼神之事，“王者有德”才出现，能辟除人间一切邪气，可令人逢凶化吉。\n\u003e\n\u003e 本项目取名\"白泽\"，寓意作为开发者的瑞兽，帮助您辟除配置烦恼，逢凶化吉，快速启动高质量项目。\n\nBaize CLI 是一个轻量、规范且高效的前端项目脚手架工具，旨在帮助开发者快速搭建基于 React、Vue 等现代框架的标准化项目结构。\n\n- \u003cspan role=\"img\" aria-label=\"rocket\"\u003e🚀\u003c/span\u003e 快速启动：秒级生成项目模板，开箱即用。\n- 🛠 规范集成：内置 ESLint、Prettier 等代码规范配置。\n- 🎨 交互友好：优雅的命令行交互体验。\n- 🌏 线上地址：[Baize](https://www.npmjs.com/package/baize-cli)\n\n```bash\n  \u003e npm install -g baize-cli\n  \u003e baize\n```\n\n## 🔍 自动化持续代码审查工具\n\n1. [DeepSource/](https://deepsource.io/)\n2. [DeepScan](https://deepscan.io/)\n3. [SonarQube](https://www.sonarsource.com/)\n\n---\n\n## 🐳 本地部署 SonarQube\n\n1. [SonarQube for Mac](https://juejin.cn/post/7210005376652886077)\n2. [Gitlab for Mac](https://juejin.cn/post/7210746685802397755)\n3. [Gitlab CI/CD for Mac](https://juejin.cn/post/7214686619097874491)\n\n---\n\n## 📖 贡献指南\n\n欢迎 PR、Issue 与 Star！\n\n1. Fork 本仓库\n2. 新建分支：`git checkout -b feature/xxx`\n3. 提交更改：`git commit -m 'feat: 新增 xxx 功能'`\n4. 推送分支：`git push origin feature/xxx`\n5. 新建 Pull Request\n\n---\n\n## 📄 License\n\nApache-2.0 © [wkylin](https://github.com/wkylin)\n\n---\n\n## 📝 约定式提交\n\n1. [约定式提交](https://www.conventionalcommits.org/zh-hans/v1.0.0/)\n2. [语义化版本 2.0.0](https://semver.org/lang/zh-CN/)\n\n---\n\n## ⭐️ Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=wkylin/pro-react-admin\u0026type=Date)](https://star-history.com/#wkylin/pro-react-admin\u0026Date)\n\n\u003c/div\u003e\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwkylin%2Fpro-react-admin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwkylin%2Fpro-react-admin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwkylin%2Fpro-react-admin/lists"}