# create-react-static **Repository Path**: Remons/create-react-static ## Basic Information - **Project Name**: create-react-static - **Description**: 基于react静态打包器 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-11 - **Last Updated**: 2022-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: webpack, JavaScript, React, mobx, Ant-Design ## README ### 静态打包介绍 #### 说明 - 基于 `webpack` 搭建的静态化打包方案,使用技术栈主要有 `react`、`antd`、`mobx` - 旨在解决多人协同开发、页面复用、单页状态等方面的问题,无需进行路由配置,打包后每个页面会生成独立的HTML、CSS、JS等文件。 - webpack 配置没有进行封装 #### 使用 ##### 目录介绍 一个完整页面包含以下部分 ```dockerfile ├── app │ ├── app.jsx │ ├── main.jsx │ ├── pages │ └── List.jsx │ └── model │ └── store.js ``` 下面对每个文件夹的作用进行介绍 - main.jsx 每个页面的入口文件,必须,一个常见的文件内容参考如下: ```jsx import App from './app'; ReactDOM.render(, document.getElementById('container')); ``` - app.jsx 页面的 UI 渲染入口,当然也可以写业务代码,示例如下: ```jsx import React from 'react'; import List from './pages/List'; export default function App () { return } ``` - model/store.jsx 每个页面的状态管理,由于每个页面互不关联,所以每个页面都有独立的状态管理,示例: ```jsx import { makeAutoObservable } from 'mobx' class Store { price = 1; amount = 10; constructor(){ makeAutoObservable(this); } get total() { return this.price * this.amount; } changePrice() { this.price ++ } } const store = new Store(); export default store; ``` - pages/List.jsx ```jsx import React, { useEffect } from 'react'; import { useObserver, useLocalObservable } from 'mobx-react'; import store from '../model/store'; export default function List() { const localStore = useLocalObservable(() => store); return useObserver(() => <>{localStore.price}) } ``` ##### 基础组件封装 目前仅对 `form` 组件进行简单的封装,也可以自己封装其它组件,参见 `component/Form` ##### 运行 使用`npm run start`, 执行此命令会默认查找`src/pages`下的所有页面一起运行,也可以单独运行一个页面,例如,一份常见的目录结构如下: ```dockerfile ├── src │ ├── assets │ ├── components │ └── app │ ├── demo │ │ ├── app.jsx │ │ ├── main.jsx │ │ └── pages │ │ └── List.jsx │ │ └── model │ │ └── store.js │ └── demo2 │ │ ├── app.jsx │ │ ├── main.jsx │ │ └── pages │ │ └── List.jsx │ │ └── model │ │ └── store.js ``` - 直接运行 `npm run start`, 会同时运行 `demo`、`demo2` - 单个运行:`npm run start demo` - 批量运行:`npm run start demo,demo2` - 运行后,在浏览器打开页面: `localhost:3033/demo` or `lcoalhost:3033/demo2` ##### 打包 - 统一打包:`npm run build` - 单个打包:`npm run build demo` - 批量打包:`npm run build demo,demo2` - 打包产物会默认放入 `dist`下