简介
react-h5 是一个免费开源的 web 模版。使用了最新的react,vite3,TypeScript等主流技术开发,开箱即用的中后台前端解决方案,也可用于学习参考。
特性
- 最新技术栈:使用 react/vite3 等前端前沿技术开发
- TypeScript: 应用程序级 JavaScript 的语言
- uncoss:原子化 CSS
准备
-
Vite - 熟悉 vite 特性
-
react - 熟悉 react 基础语法
-
Es6+ - 熟悉 es6 基本语法
-
TypeScript - 熟悉
TypeScript基本语法 -
react-Router - 熟悉 react-router 基本使用
-
antd-mobile - ui 基本使用
-
pnpm - 软件包管理器
-
unocss - css 库
-
ahooks - react hooks 库
-
-
安装 pnpm
npm install pnpm -g
-
-
- vscode 安装 unocss 和 windicss intellisense,iconify intellisense
-
-
安装 commitizen
pnpm add commitizen -g
在package.json中配置scripts
"commit": "git-cz"可以使用命令npm run commit -
-
- 多项目配置 commander - config.json 配置项目名字, 执行
cmd:r刷新配置在 routers - utils - getRouter.ts,根据项目名配置加载路由switch (__PRO_NAME__) { case 'test1': components = import.meta.glob(`../modules/test1/*.tsx`); break; default: components = import.meta.glob(`../modules/*.tsx`); break; }
- 多项目配置 commander - config.json 配置项目名字, 执行
安装使用
- 获取项目代码
https://github.com/weizheng1992/react-h5.git
- 安装依赖
cd react-h5
pnpm install
- 运行多项目某个项目
pnpm start
- 默认启动
pnpm dev
- 打包
pnpm build
- 多项目打包
pnpm cmd
Pull Request:
- 创建自己的分支:
git checkout -b feat/xxxx - 提交你的修改:
git commit -am 'feat(function): add xxxxx' - 推送您的分支:
git push origin feat/xxxx - 提交
pull request
Git 提交规范
-
feat增加新功能fix修复问题/BUGstyle代码风格相关无影响运行结果的perf优化/性能提升refactor重构revert撤销修改test测试相关docs文档/注释chore依赖更新/脚手架配置修改等workflow工作流改进ci持续集成types类型定义文件更改wip开发中
目录结构
├── README.md
├── build
│ ├── commander # 多项目命令
│ ├── plugin
│ ├── proxy.ts
│ └── utils.ts
├── src
│ ├── App.tsx
│ ├── api # api接口管理
│ ├── assets # 静态文件
│ ├── components # 公共组件
│ ├── enums # 常量
│ ├── hooks # 常用 Hooks
│ ├── main.tsx
│ ├── pages # 所有页面
│ ├── routers # 路由管理
│ ├── style # 公共样式
│ ├── utils # 公共组件
│ └── vite-env.d.ts
├── tsconfig.json
├── unocss.config.ts
└── vite.config.ts
components
-
SVG
import Icon from '/@/components/icon/Icon.vue'; import SvgIcon from '/@/components/icon/SvgIcon.vue'; <Icon icon="ion:log-out" :size="30" /> <SvgIcon name="schedule" size="32" /> -
vite glob 使用
import.meta.glob和import.meta.globEagerimport.meta.glob: 因为import.meta.glob获取到的文件就是懒加载的,避免了使用import语句, 所以打包后不会报错不存在动态引入了import.meta.globEager:不使用then也能获取到文件全局上下文进行有需要的判断
function getModules() { let components; switch (__PRO_NAME__) { case 'test1': components = import.meta.glob(`../modules/test1/*.tsx`); break; case 'report-interpret': components = import.meta.glob(`../modules/report-interpret/*.tsx`); break; default: components = import.meta.glob(`../modules/*.tsx`); break; } return components; } function getComponents() { let components; switch (__PRO_NAME__) { case 'test1': components = import.meta.globEager(`../modules/test1/*.tsx`); break; case 'report-interpret': components = import.meta.globEager(`../modules/report-interpret/*.tsx`); break; default: components = import.meta.globEager(`../modules/*.tsx`); break; } return components; } export const reactRouters = function (): Array<RouteObject> { const routerList: Array<RouteObject> = []; const modules = getModules(); const components = getComponents(); Object.keys(modules).forEach((key) => { const viewSrc: any = components[key]; const file = viewSrc.default; if (file.length === 0) return; routerList.push(...file); }); return routerList; };