1 项目目录
官方文档 -> https://umijs.org/zh-CN
### 项目目录结构 (没有的就自己创建)
------------------------------------------------------------------------------
├── config # umi 配置,包含路由,构建等配置 +++
├── config.js +++ # 对应的配置文件
├── mock # 本地模拟数据
├── public # 一些公共静态资源 +++
├── src
│ ├── assets # 本地静态资源 ++++++
│ ├── components # 业务通用组件 ++++++
│ ├── e2e # 集成测试用例
│ ├── layouts # 通用布局 ++++++
│ ├── models # 全局 dva model ++++++
│ ├── pages # 业务页面入口和常用模板 ++++++
│ ├── services # 后台接口服务, 集中管理接口路径的 ++++++
│ ├── utils # 工具库, Axios, 数据请求的二次封装等 ++++++
│ ├── locales # 国际化资源 ++++++
│ ├── service-worker.js # 用于做缓存的 ++++++
│ ├── manifest.json # 是扩展的配置文件 ++++++
│ ├── global.less # 全局样式 ++++++
│ └── global.jsx # 全局 JS ++++++
├── tests # 测试工具
├──.editorconfig
├──.gitignore
├──.env
├──.env.example
├──.prettierignore
├──.prettierrc
├──.eslintignore
├──.eslintrc.js
├──.umirc.ts (可用于写一些简单配置, 记住若想 config 生效需要删除这个文件)
├── jest.config.js
├── README.md
└── package.json
----------------------------- 注意事项 --------------------------------
1 .umirc 如果存在, 那么 config 中的配置是不生效的 (二存一)
2 npm run eject
3 组件中展示子路由配置文件的视图容器 -> { props.children }
2 项目配置
"config.js"
export default defineConfig({
routes,
proxy,
hash: true,
title: false,
targets: { ie: 11 },
history: { type: 'browser'},
ignoreMomentLocale: true,
antd: true,
treeShaking: true,
base: '/web/',
publicPath: '/web/',
plugins: [
'umi-plugin-hello'
],
dva: {
hmr: true
},
manifest: {
basePath: '/'
}
dynamicImport: {
loading: '@/components/PageLoading/index'
webpackChunkName: true
},
theme: {
'primary-color': defaultSettings.primaryColor,
"@primary-color": "#1DA57A"
}
})
3 环境变量
1 概念 🔶
----------------------------------------------------------------------------------------------
1 项目环境 -> 开发环境 (本地) + 测试环境 + 生产环境
2 环境变量 -> 定义变量 -> 让其在不同环境中拥有不同值
3 Umi 中存在一些内置环境变量
4 NODE_ENV 特殊环境变量
const {NODE_ENV} = process.env
if ( NODE_ENV === "development" ) { }
if ( NODE_ENV === "production" ) { }
5 自定义环境变量 -> 添加到全局 -> 使用
----------------------------------------------------------------------------------------------
2 设置 🔶
--------------------------------------------------------------------------------------------
1 执行命令时添加设置
"start": "umi dev"
"start": "PORT=3000 umi dev"
2 环境变量配置文件中设置
PORT=3000
BABEL_CACHE=none
XX_URL=http://172.21.4.248:81
XX_TYPE="string"
--------------------------------------------------------------------------------------------
3 添加
--------------------------------------------------------------------------------------------
const {XX_URL, XX_TYPE} = process.env
define: {
XX_TYPE: XX_TYPE || "num",
XX_URL: XX_URL || www.baidu.com
}
--------------------------------------------------------------------------------------------
4 多份环境配置文件
1 yarn add cross-env
2 新建三个文件
--------------------------------------------------------------------------------------------
config.js -> define {"envType": "dev"}
config.test.js -> define {"envType": "test"}
config.prod.js -> define {"envType": "pro"}
--------------------------------------------------------------------------------------------
3 配置 package.json 脚本命令
--------------------------------------------------------------------------------------------
"start_test": "cross-env UMI_ENV=test umi dev"
"start:prod": "cross-env UMI_ENV=prod umi dev"
"build_test": "cross-env UMI_ENV=test umi build"
"build_prod": "cross-env UMI_ENV=prod umi build"
--------------------------------------------------------------------------------------------
4 如有判断环境的需求
--------------------------------------------------------------------------------------------
1 console.log(envType)
2 相关操作
let host = ''
if (envType === "dev") {host = "www.baidu.com"}
if (envType === "pro") {return "http://172.21.4.248:81"}
--------------------------------------------------------------------------------------------
5 跨域请求代理
1 开发环境中, 访问后端数据, 存在跨域问题, 需要通过 node 后端代理, 来解决浏览器跨域问题
2 项目打包后, 跨域请求代理是失效的
export default {
proxy: {
'/api': {
'target': 'https://xxx.com/',
'changeOrigin': true,
'pathRewrite': { '^/api' : '' },
},
},
}
1 自动检测到的路径 -> https://xxx.com/api/xxx
2 然后去请求的路径 -> https://xxx.com/xxx