自建脚手架地址,觉得好用的话欢迎点个✨:
https://github.com/ericlee33/create-compositive-react-app-cli
效果图
背景
- 由于最近公司内,立项了多个不同业务,项目之间相互独立,但底层架构相似,从0搭建新项目变成了很寻常的事情,当你一个事情做多了之后,就感觉到很难受,作为一个工具人,需要想办法解决掉这个问题。
- 当通过
create-react-app
创建项目模板之后,还需要删除掉一堆不需要的东西,安装很多框架生态链,Linter等依赖,完成install后,还要配置项目底层各种东西,很耗费精力和时间。
FB已经提供了create-react-app,为什么还要做react脚手架?
先谈谈vue-cli的优点
- 提供了可选配置项(由于
Vue
周边生态较为单一,官方提供的路由/状态管理方案只有一个,不像React
生态光一个状态管理方案就有MobX、Redux-Saga、Redux-Thunk
等等。。) - 令人舒适的
Inquirer
界面(不像create-react-app
,通过执行脚手架时,传入不同configuration
来创建不同需求的模板) - 提供保存配置的功能
create-react-app的缺点
在我看来,从0快速搭建项目的角度看,主要有以下几个问题
- 未提供可选
react-router
路由配置的模板 - 未提供状态管理
Lib
- 没有提供
Linter
,Coding
过程很不爽 - 一些工具库
npm
包中没有typing
文件,需要手动去安装@types
无法享受vscode
利用@types
文件在js
中也提供代码提示的快感。
下面是官方文案提供的Router说明:
Create React App 并未规定特定的Router(路由)解决方案,但 React Router 是最受欢迎的 Router(路由) 解决方案。
要添加它,请运行:
或者你可以使用
yarn
:
要尝试它,删除src/App.js
中的所有代码,并将其替换为其网站上的任何示例。 基本示例 是开始尝试的好地方。
请注意,在部署应用程序之前,你可能需要配置生产服务器以支持客户端路由。
1 | npm install --save react-router-dom |
1 | yarn add react-router-dom |
社区有没有现成方案呢?
- 在
github
上搜索react-scaffold
、react脚手架
,很难在社区中找到一个完整满足自己需求的脚手架
- 可以看到搜索结果大多是
Archived
或无人维护的项目。
开始自制脚手架
为了解决以上create-react-app
痛点,我决定仿照vue-cli
,制作一个react
的集成脚手架。
技术栈
为了更方便开发脚手架,我们需要以下node工具🔧
- commander 命令行
- inquirer 交互式命令
- ejs 模板渲染
- execa 子进程管理工具
- chalk 用于输出带颜色的log
- ora 可以在命令行展示spinning
项目目录
1 | . |
项目总结
总结一下,主要是以下模块
- /bin/index.js
命令行调用脚手架的入口
主要放置了commander
命令
- /lib/create.js
执行完在命令行输入的commander
后,在这里执行变量注入与模板渲染等逻辑
- 注入每种不同模板项,从其
/lib/promptModules/${name}
增加不同的prompts
- 执行
inquirer
- 根据用户所选项,拼接
package.json
- 注入模板所需的
ejs
变量,通过ejs
进行模板渲染,不同的配置项最终会生成不同的react-app
项目模板
- /lib/promptModules/
为inquirer
注入不同的prompts
选项
- /lib/generator
React
项目模板,每一种模板,要求了不同配置项,会根据用户选择,动态注入到最终生成的项目中
- /utils
工具
- /templates
components
和views
模板注入
未来优化项
ejs
注入可选项不友好,比如为了动态在App.jsx
入口中,根据用户所选配置项判断是否import React-Router、Redux
等,v1版本目前是通过根据answers
,使用Ejs
来渲染的。未来这一块可以优化为通过修改文件的AST
,来实现配置的注入,对模板的侵入性会更低。- 后续需要在项目中加入
Jest
单元测试,保证脚手架后续迭代,对主流程功能不会造成影响。
如果大家想了解项目细节,后续我可以再写一篇关于项目中细节的文章。
自制React集成脚手架 功能介绍
npm地址
Introduction 脚手架介绍
减少从0到1搭建项目的成本,快速开发项目
在create-react-app
v4.0.3
脚手架基础上,增加了如下项目配置可选项
React-Redux + Redux-Thunk + Redux-Logger
React-Router
(可选择History
,Hash
模式)Linter / Formatter
(目前提供了Eslint + EditorConfig + Prettier + CommitLint
)
完成模板创建后,自动安装依赖。
Getting started 快速使用
- 推荐使用
npx create-compositive-react-app-cli init <your project name>
- 也可使用
npm i -g create-compositive-react-app-cli
ccra init <your project name>
Usage 使用方法
快速搭建项目
ccra init <name>
配置项有3种可选项:
- Redux
- React-Router (可选择History, Hash模式)
- Linter / Formatter (目前提供了Eslint + EditorConfig + Prettier + CommitLint)
快速创建Page、Component模板
ccra create
可以在 CLI 中自行选择创建 Page 或 Component 输入 name 后即可完成模板自动创建
Features 功能介绍
- 一键快速创建
Page
组件 - 一键快速创建
Components
组件 - 在
ccra init <name>
进行初始化项目时,通过Inquirer
库的功能,提供给用户各类可选项,可以根据用户所需配置,进行项目自动化构建。- 注:状态管理暂时仅提供
Redux
模板 - 路由管理提供
React-Router
v5
模板
- 注:状态管理暂时仅提供
- 自动安装所需要的
@types
文件,即便用户使用JavaScript
进行开发,也能在vscode IDE
下得到函数提示支持