/Captain

🤩🛳🛳🛳 a basic react project by react16 + react-router-dom4 + immutable + redux4 + parcel

Primary LanguageTypeScript

captain

🛳 Captain 👀

一个麻雀虽小,但五脏俱全的脚手架 英文名Captain 中文名“船长”

据说业务需求能在Captain的承载下稳稳航行 (本脚手架将持续更新)

功能

  • 初次使用parcel进行集成和打包,不再需要烦恼于各种配置 零配置文件 支持更快的热更新 和更优化的生产构建
  • 封装了数据模拟,本地即可支持mock数据,可独立于后台开发前端需求
  • 路由按需加载,引入react-loadable 首屏加载超快
  • 引入了antd, 提供ui控件支持
  • 支持typeScript, 提供类型+接口支持 开发体验更强
  • 按业务模块划分的目录结构,开发独力功能时无需分心其它模块,做到最小耦合

工程结构

.
├── dist                     # 打包构建的文件
├── .env                     # 环境变量
├── src                      # 主程序目录
│   ├── index.html           # 程序启动和渲染入口文件
│   ├── index.tsx            # 入口文件依赖
│   ├── types                # 类型声明
│   ├── global               # 全局文件
│   │   ├── fonts            # 全局字体
│   │   ├── images           # 全局图片
│   │   ├── style            # 全局样式
│   │   ├── svgs             # svg
│   │   ├── types            # 全局通用类 接口 枚举等
│   ├── helpers              # 重要的公共方法
│   ├── components           # 公共组件
│   ├── pages                # 业务按照路由进行划分
│   │   ├── index.tsx        # 路由主文件
│   │   ├── Demo             # 路由/的页面
│   │   │   ├── index.tsx    # demo页面tsx
│   │   │   ├── index.less   # demo页面样式
│   │   └── Demo2            # 路由/demo2的页面
│   │       ├── index.tsx    # demo2页面主文件
│   │       ├── index.less   # demo2页面样式
│   ├── modes                # 业务模型
│   │   ├── store.ts         # store定义
│   │   ├── reducers.ts      # reducers
│   │   ├── index.ts         # 输出所有的业务mode 
│   │   ├── ActionModeBase.ts # 基础模型
│   │   ├── Demo             # Demo页面的模型
│   │       ├── index.ts     # 模型主文件
│   │       ├── reducers.ts  # reducers的描述
│   │       ├── type.ts      # 一些类型接口定义
│   └── mock                 # 定义mock数据的文件
│   │   ├── Demo             # 定义Demo页面的mock数据
│   │       ├── index.ts     # 主文件

使用方法

$ git clone https://github.com/lemondreamtobe/Captain.git
$ cd Captain
// 安装依赖
$ yarn
// 启动
$ yarn start
// 打包
$ yarn build

FAQ

为什么使用parcel

零配置打包不要太爽!你看工程目录中不再存在各种webpack文件 热更新和生产构建更快 打包优化代码体积更小(ps: 以前要做到这些事情要写各种webpack配置)

为什么使用typeScript

类型 接口声明能让idea各种语法高亮 接口定义跳转 开发十分方便 后期维护便利 前期开发更容易避免bug

为什么使用redux

通过业务模型mode抽离+redux能更好的组织代码和结构 dva的接入也考虑过 并没有官网说的那么容易上手 而且dva包含了react-router等一些不需要的库

脚手架的思考

个人以为 现在的一个脚手架标准需要解决以下几个基本问题
  • 定义框架 react/vue? 将决定整个工程的走向 以下3点都在此基础上进行延伸
  • 路由 SPA项目最为重要的一项东西 react-router/vue-router/dva-router?
  • 数据流 redux/dva/vuex?
  • 集成打包工具 webpack/gulp/pracel?负责热更新 启动/构建 编译等等