项目地址:javascript
点击在线预览java
在 上篇 中主要说明了本项目的一些主要思路,如今来看看具体代码:本项目使用 @medux/react-web-router + antd4 开发,全程使用 React Hooks,并配备了比较完善的脚手架。node
// 注意一下,由于本项目风格检查要求以 LF 为换行符
// 因此请先关闭 Git 配置中 autocrlf
git config --global core.autocrlf false
git clone https://github.com/wooline/medux-react-admin.git
cd medux-react-admin
yarn install
复制代码
yarn start
,会自动启动一个开发服务器。yarn build-local
,会将代码编译到 /dist/local 目录node start.js
,会启动一个产品服务器 DemoCSSModule 主要用来防止命名出现冲突,可是有一些缺点,好比命名过长、hash 值丑陋、不适合重用、不适合调试、编译慢等...因此本项目改良了它命名规则与用法:react
// CSS定义
:global {
:local(.root) { //只有根节点用生成规则
.g-search {
padding-top: 0;
padding-bottom: 0;
}
.ant-modal-footer {
text-align: center;
padding: 20px;
}
}
}
// 在Component中引入
import styles from './index.m.less';
<div className={styles.root}>
<div class="g-search">
...
</div>
</div>
复制代码
moduleName-viewName
做为 cssModule 的生成规则,并以此来做为命名空间就能保证不冲突,且可读性很好。comp-componentName
做为 cssModule 的生成规则g-xxx
作为 cssModule 的生成规则最后看一下咱们改良后的 cssModule 生成的 classname,是否是清晰不少: webpack
运行 Demo 须要从后台 api 中获取数据,一般得另外开一个 api 服务器,为此本 Demo 特地写了一个简单的 mock 中间件来合并到 webpackDevServer 中。git
为何不用 mock.js?github
- 想生成有逻辑的假数据,而不是一堆占位字符
- 想模似真实的 http 请求和返回
它的基本原理以下: web
记录
功能,该中间件会拦截真实 API 的 Resphonse,将其以文件形式保存在/mock/temp/目录下,能够叫它们 MockFiledatabase.js
文件,该文件会被自动注入到各个 MockFile 中,你能够用它来编写简单的 server 端数据逻辑const mockjs = require('mockjs');
来引用 mockjsreact-hot-loader
已经宣告死亡了。@medux/dev-utils/dist/webpack-loader/module-hot-loader
来自动支持它们模块的配置统一放在/src/modules/index.ts 中,例如:typescript
// 定义模块的加载方案,同步或者异步都可
export const moduleGetter = {
app: () => {
return import(/* webpackChunkName: "app" */ 'modules/app');
},
adminLayout: () => {
return import(/* webpackChunkName: "adminLayout" */ 'modules/admin/adminLayout');
},
adminHome: () => {
return import(/* webpackChunkName: "adminHome" */ 'modules/admin/adminHome');
},
};
复制代码
不少项目都不推荐使用全局变量
,认为容易形成命名空间的污染。但从实用主义来讲,我以为可控的全局变量能够提升很多开发效率,关键是可控。由于咱们使用 typescript 开发,具备不少静态语言的类型安全,因此适量的把一些高频使用的变量直接提高到全局变量是可控的。咱们将全局变量集中在 /src/Global.ts
中定义。
NODE_ENV=production SITE=xxx node build/build.js
命令会根据当前环境设置将代码编译到 /dist/xxx/ 目录下,其中SITE=xxx
表示使用 /conf/ 下的哪套环境设置node_modules
中的所有样式,一个是 src
开发目录中的所有样式咱们注意到全部页面分为 2 类,一类是须要用户登陆后可见的,如/admin/xxx
,另外一类则是无需登陆的如/article/xxx
。须要用户登陆可见的页面,对于搜索引擎 SEO 没有意义,而无需用户登陆的页面咱们能够将其改造为服务器渲染,以此增长搜索引擎的流量入口。
如何将服务器渲染与浏览器渲染优雅的同构,请看另外一个 Demo:medux-react-ssr
欢迎批评指正,以为还不错的别忘了给个Star
>_<,若有错误或 Bug 请反馈,后续将持续改进。
QQ 群交流:929696953