目录标题
- 1 项目目录
- 2 项目配置
- 3 环境变量
- 4 多份环境配置文件
- 5 跨域请求代理
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.envif ( NODE_ENV === "development" ) { }if ( NODE_ENV === "production" ) { }5 自定义环境变量 -> 添加到全局 -> 使用
----------------------------------------------------------------------------------------------2 设置 🔶
--------------------------------------------------------------------------------------------1 执行命令时添加设置 "start": "umi dev" "start": "PORT=3000 umi dev" 2 环境变量配置文件中设置 PORT=3000BABEL_CACHE=noneXX_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