+
+
+[](http://makeapullrequest.com)
+
+
+
### 文档地址:[wiki](https://github.com/yezihaohao/react-admin/wiki)
### 问题和方案汇总:[issue](https://github.com/yezihaohao/react-admin/issues/12)
-### 最下方增加版本更新日志😁
+### 更新日志迁移至[CHANGELOG.md](https://github.com/yezihaohao/react-admin/blob/master/CHANGELOG.md)😁(重要!对于了解项目部分功能和代码很有用!)
+
+### cli 安装和使用 react-admin 🔥
+
+使用 [saigao](https://github.com/yezihaohao/saigao) 快速安装和下载 react-admin 模板来开发项目:
+
+```js
+npm i -g saigao
+
+saigao myapp
+// 或者使用npx 下载模板
+npx saigao myapp
+```
### 前言
-> 网上react后台管理开源免费的完整版项目比较少,所以利用空余时间集成了一个版本出来,已放到GitHub
- 启动和打包的时间都稍长,请耐心等待两分钟
-- [GitHub地址](https://github.com/yezihaohao/react-admin)
-- [预览地址](http://cheng_haohao.oschina.io/reactadmin/#/app/dashboard/index)(已增加响应式,可手机预览😄)
+> 网上 react 后台管理开源免费的完整版项目比较少,所以利用空余时间集成了一个版本出来,已放到 GitHub
+> 启动和打包的时间都稍长,请耐心等待两分钟
+
+- [GitHub 地址](https://github.com/yezihaohao/react-admin)
+- [预览地址](https://admiring-dijkstra-34cb29.netlify.com)(已增加响应式,可手机预览 😄)
### 依赖模块
-项目是用create-react-app创建的,主要还是列出新加的功能依赖包
-
-点击名称可跳转相关网站😄😄
-
-- [react@15.5.0](https://facebook.github.io/react/)
-- [react-router@3.0.2](https://react-guide.github.io/react-router-cn/)(react路由,4.x的差异还是比较大,暂时还是3.x的版本)
-- [antd@2.9.3](https://ant.design/index-cn)(蚂蚁金服开源的react ui组件框架)
-- [axios@0.16.1](https://github.com/mzabriskie/axios)(http请求模块,可用于前端任何场景,很强大👍)
-- [echarts-for-react@1.2.0](https://github.com/hustcc/echarts-for-react)(可视化图表,别人基于react对echarts的封装,足够用了)
-- [recharts@0.22.3](http://recharts.org/#/zh-CN/)(另一个基于react封装的图表,个人觉得是没有echarts好用)
-- [nprogress@0.2.0](https://github.com/rstacruz/nprogress)(顶部加载条,蛮好用👍)
-- [react-draft-wysiwyg@1.9.6](https://github.com/jpuri/react-draft-wysiwyg)(别人基于react的富文本封装,如果找到其他更好的可以替换)
-- [react-draggable@2.2.4](https://github.com/mzabriskie/react-draggable)(拖拽模块,找了个简单版的)
-- [screenfull@3.2.0](https://github.com/sindresorhus/screenfull.js/)(全屏插件)
-- [photoswipe@4.1.2](https://github.com/dimsemenov/photoswipe)(图片弹层查看插件,不依赖jQuery,还是蛮好用👍)
-- [animate.css@3.5.1](http://daneden.me/animate)(css动画库)
-- 其他小细节省略
+
+项目是用 create-react-app 创建的,主要还是列出新加的功能依赖包
+
+点击名称可跳转相关网站 😄😄
+
+- [react](https://facebook.github.io/react/)
+- [react-router](https://react-guide.github.io/react-router-cn/)(react 路由,4.x 的版本,如果还使用 3.x 的版本,请切换分支(ps:分支不再维护))
+- [redux](https://redux.js.org/)(基础用法,但是封装了通用 action 和 reducer,demo 中主要用于权限控制(ps:目前可以用 16.x 的 context api 代替),可以简单了解下)
+- [antd](https://ant.design/index-cn)(蚂蚁金服开源的 react ui 组件框架)
+- [axios](https://github.com/mzabriskie/axios)(http 请求模块,可用于前端任何场景,很强大 👍)
+- [echarts-for-react](https://github.com/hustcc/echarts-for-react)(可视化图表,别人基于 react 对 echarts 的封装,足够用了)
+- [recharts](http://recharts.org/#/zh-CN/)(另一个基于 react 封装的图表,个人觉得是没有 echarts 好用)
+- [nprogress](https://github.com/rstacruz/nprogress)(顶部加载条,蛮好用 👍)
+- [react-draft-wysiwyg](https://github.com/jpuri/react-draft-wysiwyg)(别人基于 react 的富文本封装,如果找到其他更好的可以替换)
+- [react-draggable](https://github.com/mzabriskie/react-draggable)(拖拽模块,找了个简单版的)
+- [screenfull](https://github.com/sindresorhus/screenfull.js/)(全屏插件)
+- [photoswipe](https://github.com/dimsemenov/photoswipe)(图片弹层查看插件,不依赖 jQuery,还是蛮好用 👍)
+- [animate.css](http://daneden.me/animate)(css 动画库)
+- [react-loadable](https://github.com/jamiebuilds/react-loadable)(代码拆分,按需加载,预加载,样样都行,具体见其文档,推荐使用)
+- [redux-alita](https://github.com/yezihaohao/redux-alita) 极简的 redux2react 工具
+- 其他小细节省略
### 功能模块
-备注:项目只引入了ant-design的部分组件,其他的组件antd官网有源码,可以直接复制到项目中使用,后续有时间补上全部组件。
-项目使用了antd的自定义主题功能-->黑色,若想替换其他颜色,具体操作请查看antd官网
+
+备注:项目只引入了 ant-design 的部分组件,其他的组件 antd 官网有源码,可以直接复制到项目中使用,后续有时间补上全部组件。
+
+项目使用了 antd 的自定义主题功能-->黑色,若想替换其他颜色,具体操作请查看 antd 官网
+
-- 首页
- - 完整布局
- - 换肤(全局功能,暂时只实现了顶部导航的换肤,后续加上其他模块)
-- 导航菜单
- - 顶部导航(菜单伸缩,全屏功能)
- - 左边菜单(增加滚动条以及适配路由的active操作)
-- UI模块
- - 按钮(antd组件)
- - 图标(antd组件并增加彩色表情符)
- - 加载中(antd组件并增加顶部加载条)
- - 通知提醒框(antd组件)
- - 标签页(antd组件)
- - 轮播图(ant动效组件)
- - 富文本
- - 拖拽
- - 画廊
-- 动画
- - 基础动画(animate.css所有动画)
- - 动画案例
-- 表格
- - 基础表格(antd组件)
- - 高级表格(antd组件)
- - 异步表格(数据来自掘金酱的接口)
-- 表单
- - 基础表单(antd组件)
-- 图表
- - echarts图表
- - recharts图表
-- 页面
- - 登录页面(包括GitHub第三方登录)
- - 404页面
+- 首页
+ - 完整布局
+ - 换肤(全局功能,暂时只实现了顶部导航的换肤,后续加上其他模块)
+- 导航菜单
+ - 顶部导航(菜单伸缩,全屏功能)
+ - 左边菜单(增加滚动条以及适配路由的 active 操作)
+- UI 模块
+ - 按钮(antd 组件)
+ - 图标(antd 组件并增加彩色表情符)
+ - 加载中(antd 组件并增加顶部加载条)
+ - 通知提醒框(antd 组件)
+ - 标签页(antd 组件)
+ - 轮播图(ant 动效组件)
+ - 富文本
+ - 拖拽
+ - 画廊
+- 动画
+ - 基础动画(animate.css 所有动画)
+ - 动画案例
+- 表格
+ - 基础表格(antd 组件)
+ - 高级表格(antd 组件)
+ - 异步表格(数据来自掘金酱的接口)
+- 表单
+ - 基础表单(antd 组件)
+- 图表
+ - echarts 图表
+ - recharts 图表
+- 页面
+ - 登录页面(包括 GitHub 第三方登录)
+ - 404 页面
### 功能截图
+
#### 首页
+

+
#### 按钮图标等
+

+
#### 轮播图
+

+
#### 富文本
+

+
#### 拖拽
+

+
#### 画廊
+

+
#### 动画
+

+
#### 表格
+

+
#### 表单
+

+
#### 图表
+

+
#### 页面
+

+#### 菜单拖拽
+
+
+
### 代码目录
+
```js
+-- build/ ---打包的文件目录
+-- config/ ---npm run eject 后的配置文件目录
+-- node_modules/ ---npm下载文件目录
-+-- public/
++-- public/
| --- index.html ---首页入口html文件
| --- npm.json ---echarts测试数据
| --- weibo.json ---echarts测试数据
@@ -108,19 +163,19 @@ react-admin system solution
| | --- index.js
| +-- components ---各式各样的组件存放目录
| | +-- animation ---动画组件
-| | | --- ...
+| | | --- ...
| | +-- charts ---图表组件
-| | | --- ...
+| | | --- ...
| | +-- dashboard ---首页组件
-| | | --- ...
+| | | --- ...
| | +-- forms ---表单组件
-| | | --- ...
+| | | --- ...
| | +-- pages ---页面组件
-| | | --- ...
+| | | --- ...
| | +-- tables ---表格组件
-| | | --- ...
+| | | --- ...
| | +-- ui ---ui组件
-| | | --- ...
+| | | --- ...
| | --- BreadcrumbCustom.jsx ---面包屑组件
| | --- HeaderCustom.jsx ---顶部导航组件
| | --- Page.jsx ---页面容器
@@ -131,84 +186,63 @@ react-admin system solution
| --- index.js ---项目的整体js入口文件,包括路由配置等
--- .env ---启动项目自定义端口配置文件
--- .eslintrc ---自定义eslint配置文件,包括增加的react jsx语法限制
---- package.json
+--- package.json
```
+
### 安装运行
+
##### 1.下载或克隆项目源码
-##### 2.npm安装相关包文件(国内建议增加淘宝镜像源,不然很慢,你懂的😁)
+
+##### 2.yarn 安装依赖(国内建议增加淘宝镜像源,不然很慢,你懂的 😁)
+
+> 有些老铁遇到运行时报错,首先确定下是不是最新稳定版的 nodejs 和 yarn,切记不要用 cnpm
+
```js
-npm i
+// 首推荐使用yarn装包,避免自动升级依赖包
+yarn;
```
+
##### 3.启动项目
+
```js
-npm start
+yarn start
```
+
##### 4.打包项目
+
```js
-npm run build
+yarn build
```
-### 更新日志
-
-#### 2017-07-08
-- 依赖包版本升级
- - react@15.6.1
- - antd@2.11.2
- - webpack@2.6.1
- - 等等
-#### 2017-08-01
-- 引入redux系列
- - redux@3.7.2
- - redux-thunk@2.2.0
- - react-redux@5.0.5
-- 增加权限管理模块
- - 使用easy-mock模拟数据模拟登录接口
- - 使用redux系列将登录用户数据传递给权限组件
- - 权限组件采用Render Callback的方式传递权限给需要受控制的组件(具体做法请查看源代码。)
- - 用户状态保存在localStorage中
- - 具体做法请运行项目查看
- - PS:以上管理权限只是一种方式,但这绝对不是唯一的方式,也不是最好的方式。如果你有更好的方式,不妨加上面的群和大家一起分享下。😄😄
-- 增加路径别名
- - 使用@别名处理引入组件相对路径过长问题。
- - 缺点:编辑器不能使用快捷提示和快捷跳转到相应的文件
-#### 2017-08-13
-- 权限管理模块增加页面跳转权限验证
- - 点击权限管理的路由拦截,若没有访问权限则会跳转到404页面。
- - 大致实现方式(非常简单):通过向自定义router组件传入store,登录之后可获取到redux中的权限state数据,并通过判断是否包含权限进行跳转。ps: 该demo的效果是管理员登录之后才能跳转到路由拦截页面。具体操作请拉取代码尝试。
-#### 2017-08-26
-- 增加响应式布局
- - 替换antd Col 组件的响应式栅格为md(具体参数用法请查看antd官方文档)
- - 初始化页面是获取当前浏览器宽度设置菜单显示类型
- - 监听window的onresize函数,设置菜单显示类型。PS:浏览器宽度存入redux中,方便组件之间传递。
-
-#### 2017-09-13
-- 依赖包版本升级
- - antd@2.13.1(目前最新版)
-
-#### 2017-10-21
-- 开发环境增加react-hot-loader-保持状态刷新组件(译:实时调整组件),可参考以下相关项目
- - [react-hot-loader](https://github.com/gaearon/react-hot-loader)
-
-#### 2017-12-12
-- 依赖包版本升级
- - antd@3.0.1(目前最新版)
- - react-router-dom@4.2.2
-- 大改动
- - react-router切换4.x版本,切换响应的版本路由写法(具体见代码更新日志)
- - ps: react-router 3.x的版本请查看代码分支router3.x
-
-#### 2018-01-12
-- 增加cssmodule的支持(css, less)
- - 建议用css预处理器,文件名为xxx.module.less,引入相应组件即可使用。
- - 具体做法参见新增模块,路由后缀:/app/cssModule。[点击访问](http://cheng_haohao.oschina.io/reactadmin/#/app/cssModule)
+### Q&A(点击问题查看答案)
+
+#### 1.[create-react-app 打包项目 run build 增加进度条信息?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-325383346)
+
+#### 2.[接口跨域了,怎么在本地开发时配置代理?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-326169055)
+
+#### 3.[在使用 hashRouter 的情况下怎么实现类似锚点跳转?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-345127221)
+
+#### 4.[怎么添加多页面配置?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-348088852)
+
+#### 5.[路由传参数接问号怎么传?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-375583089)
+
+#### 6.[如何兼容 IE 浏览器?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-510295292)
+
+### License
+
+MIT
### 结尾
+
该项目会不定时更新,后续时间会添加更多的模块
-欢迎和感谢大家PR~~👏👏
+欢迎和感谢大家 PR~~👏👏
-若有问题,可加QQ群264591039与我交流
+若有问题,可加 QQ 群与我交流
-ps:以上群满的时候请加群:592688854
+- 1 群:264591039(已满)
+- 2 群:592688854(已满)
+- 3 群:743490497 (已满)
+- 4 群:150131600 (已满)
-如果对你有帮助,给个star哟~~❤️❤️❤️❤️
+如果对你有帮助,给个 star 哟~~❤️❤️❤️❤️
diff --git a/config/env.js b/config/env.js
index 8b39b6c63..18bfdb8ab 100644
--- a/config/env.js
+++ b/config/env.js
@@ -8,83 +8,87 @@ const paths = require('./paths');
delete require.cache[require.resolve('./paths')];
const NODE_ENV = process.env.NODE_ENV;
+const REACT_ADMIN = process.env.REACT_ADMIN;
if (!NODE_ENV) {
- throw new Error(
- 'The NODE_ENV environment variable is required but was not specified.'
- );
+ throw new Error('The NODE_ENV environment variable is required but was not specified.');
}
// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
-var dotenvFiles = [
- `${paths.dotenv}.${NODE_ENV}.local`,
- `${paths.dotenv}.${NODE_ENV}`,
- // Don't include `.env.local` for `test` environment
- // since normally you expect tests to produce the same
- // results for everyone
- NODE_ENV !== 'test' && `${paths.dotenv}.local`,
- paths.dotenv,
+const dotenvFiles = [
+ `${paths.dotenv}.${NODE_ENV}.local`,
+ `${paths.dotenv}.${NODE_ENV}`,
+ `${paths.dotenv}.ra.${REACT_ADMIN}`,
+ // Don't include `.env.local` for `test` environment
+ // since normally you expect tests to produce the same
+ // results for everyone
+ NODE_ENV !== 'test' && `${paths.dotenv}.local`,
+ paths.dotenv,
].filter(Boolean);
// Load environment variables from .env* files. Suppress warnings using silent
// if this file is missing. dotenv will never modify any environment variables
-// that have already been set.
+// that have already been set. Variable expansion is supported in .env files.
// https://github.com/motdotla/dotenv
-dotenvFiles.forEach(dotenvFile => {
- if (fs.existsSync(dotenvFile)) {
- require('dotenv').config({
- path: dotenvFile,
- });
- }
+// https://github.com/motdotla/dotenv-expand
+dotenvFiles.forEach((dotenvFile) => {
+ if (fs.existsSync(dotenvFile)) {
+ require('dotenv-expand')(
+ require('dotenv').config({
+ path: dotenvFile,
+ })
+ );
+ }
});
// We support resolving modules according to `NODE_PATH`.
// This lets you use absolute paths in imports inside large monorepos:
-// https://github.com/facebookincubator/create-react-app/issues/253.
+// https://github.com/facebook/create-react-app/issues/253.
// It works similar to `NODE_PATH` in Node itself:
// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
// Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims.
-// https://github.com/facebookincubator/create-react-app/issues/1023#issuecomment-265344421
+// https://github.com/facebook/create-react-app/issues/1023#issuecomment-265344421
// We also resolve them to make sure all tools using them work consistently.
const appDirectory = fs.realpathSync(process.cwd());
process.env.NODE_PATH = (process.env.NODE_PATH || '')
- .split(path.delimiter)
- .filter(folder => folder && !path.isAbsolute(folder))
- .map(folder => path.resolve(appDirectory, folder))
- .join(path.delimiter);
+ .split(path.delimiter)
+ .filter((folder) => folder && !path.isAbsolute(folder))
+ .map((folder) => path.resolve(appDirectory, folder))
+ .join(path.delimiter);
// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be
// injected into the application via DefinePlugin in Webpack configuration.
const REACT_APP = /^REACT_APP_/i;
+const REACT_ADMIN_REG = /^REACT_ADMIN_/i;
function getClientEnvironment(publicUrl) {
- const raw = Object.keys(process.env)
- .filter(key => REACT_APP.test(key))
- .reduce(
- (env, key) => {
- env[key] = process.env[key];
- return env;
- },
- {
- // Useful for determining whether we’re running in production mode.
- // Most importantly, it switches React into the correct mode.
- NODE_ENV: process.env.NODE_ENV || 'development',
- // Useful for resolving the correct path to static assets in `public`.
- // For example, + GitHub地址: + + https://github.com/yezihaohao + +
++ 博客地址: + + https://yezihaohao.github.io/ + +
+