項目地址: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