React 项目构建
在很久之前在知乎回答过一个问题:公司要求统一一套前端脚手架,该怎么选择? 在那个时候推荐了使用了魔改
vue-cli@2来实现react的基础脚手架,让react以及vue能够基本使用同一个模式的脚手架。
在之后也将他开源了出来:vue-cli-react-base 最基础的实现
思考
在之前开源版本 vue-cli-react-base 的实现中只完成了和 create-react-app 构建出来的一样包含 react 运行最基础的功能。
最近回过头再再看,也一直在思考,一个面向于企业内部的项目脚手架到底有什么样的需求?
是如同 vue-cli@2 和 create-react-app 一样的嘛?只实现最基础的功能,所有的扩展(路由,数据管理,ui 库,目录结构约定),都交给开发者去完成。
感觉并不够。
还是如同 umijs 或者 nextjs 一样?开箱即用,有约定式路由,代码自动分割,在预定义的同时也支持 自定义扩展 webpack 配置达到用户的需求。
这样好像还不错。拿过来直接就可以开发项目了。
但是 他们的自定义扩展 webpack 真的足够方便吗?他们本身带来的学习成本呢?
基于这种思考,我开始尝试的去做这样一个事情。 把 vue-cli-react-base 一个基本完整的项目开发骨架给搭建起来。
于是最近开始基于他进行了一些改造。
如下:
vue-cli-react-base
vue-cli-react-base github
使用 vue-cli@2 驱动的 react 项目
使用 webpack@4 + babel@7 + (css/less module) + prettier 来构建
支持 module.css / module.less 等 css module 语法,推荐使用 npm i -S classnames 库来更好的使用 css module
内置了 husky 与 eslint-config-standard 与 prettier-eslint 来运行 git commit 时代码的自动格式化。自动格式化 使用了 standard 的代码风格
状态管理工具方面使用 @rematch , 并且内置了插件 @rematch/immer 以及 @rematch/loading
具体使用方式参考: Rematch实践指南
内置了组件库 antd 结合 babel-plugin-import 做了组件(lodash也可以)的按需引入 (直接修改 src/theme.js 可以修改主题色)。当然要用别的组件库也是可行的,需要改的东西很少不是嘛?
使用 react-router-config 来达到和 vue-router 类似的体验。
结合 react-loadable 与 import() 实现了路由的按需加载
package.json 使用了 ~ 版本,来尽量保证安装时依赖升级导致项目报错问题
对于 mock 数据的需求,使用npm run dev-mock启动服务,实现了两种途径的mock数据:
- 直接
webpack-dev-server提供的proxyTable - 使用本地
mock数据,在mocker文件夹下,修改添加即可, 或者使用easymock这样类似的在线 mock 服务,基于这样的需求实现了一个apiProxy的高阶函数,提供了本地mock的支持,当然他也能够比较方便的进行各种需求的改造。
1 | /** |