react+umi+antd项目搭建配置

官方文档链接:
UmiJS官方文档
React官方文档
Ant Design官方文档

一、项目搭建

对于react umi项目搭建,umi官方文档已经写的很清晰了,具体请查看上面的umi官方文档链接。这里我不再详细说明,着重说明一些需要注意的地方。

1. 首先,确认是否已安装node和umi,本文umi版本使用3.0版本。

$ node -v
$ umi -v

2. 可通过以下两种命令创建项目,但创建出来的项目umi版本不同

$ yarn create umi
说明:
使用此命令创建的项目,umi版本为2.x版本,如需使用3.x版本还需要手动升级,关于手动升级的操作umi官网也有详细步骤
除此之外,此命令可选择创建哪种项目,如需使用ant-design-pro框架可使用此法创建(如下图)$ yarn create @umijs/umi-app
说明:
此命令为umi官网提供的项目创建工具,创建完成umi项目即为3.x版本推荐使用

注意:以上两种创建方式都需要手动安装 antd 依赖,项目工程默认自带的是 @ant-design/pro-layout ,但pro-layout相关文档阅读体验不够好,个人比较推荐直接使用 antd (使用ant-design-pro框架除外)

二、ESLint相关配置

umi项目的lint相关配置使用 @umijs/fabric 就已经足够了,运行过程中如果有什么依赖找不到直接yarn安装就行。

1. 新增 .eslintrc.js、.eslintignore、.stylelintrc.js、.stylelintignore 配置文件

eslintrc.js

module.exports = {extends: [require.resolve('@umijs/fabric/dist/eslint')],rules: {'no-unused-vars': 'warn','@typescript-eslint/no-unused-vars': 'warn'},
}

.stylelintrc.js

module.exports = {extends: [require.resolve('@umijs/fabric/dist/stylint')]
};

prettierrc相关配置使用项目创建时默认的就行,不用修改。

2. 配置lint相关命令(仅供参考,可根据需求灵活配置)

"lint": "umi g tmp && yarn lint:js && yarn lint:style && yarn lint:prettier",
"lint:prettier": "prettier --check \"**/*\" --end-of-line auto",
"lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src && npm run lint:style",
"lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
"lint:style": "stylelint --fix \"src/**/*.less\""

三、Umi项目配置

1. 两种配置方式(推荐config方式)

详见:https://umijs.org/zh-CN/docs/config

注意,使用config配置方式需注意config文件夹所在目录为根目录,不要配错到src目录之下了!

2. 两种路由配置方式(约定式路由与配置式路由)

详见:https://umijs.org/zh-CN/docs/convention-routing

注意:如需配置不在 / 根路由下的独立路由页面(如登录页),避免访问此独立页面时,此页面嵌入到了 layout 中,可通过配置式路由将独立页面放到根路由配置到上方,路由时首先匹配到了独立页面就不会继续匹配根路由下的子页面,从而避免出现独立页面嵌套 layout 的情况。

3. 两种 layout 布局方式

1)config配置layout(不推荐)

config/config.ts

import { defineConfig } from 'umi';export default defineConfig({ title: '管理系统', layout: { name: '这是菜单', locale: false }routes: [{path: '/dashboard',name: 'dashboard',icon: 'dashboard',},...]
})

配置好 layout 和路由后,按照路由创建对应页面组件即可

2) 在src目录下新增 layouts 布局文件夹配置(推荐)
在项目src目录创建 layouts 文件夹,项目运行时会自动读取此文件路径下的布局组件。

布局时,使用 @ant-design/pro-layout 或 antd 两种UI组件其中某一种皆可,我使用的是antd组件库的布局组件。

详见:布局 Layout - Ant Design

4. 全局配置

1)全局样式
src文件夹下创建global.less样式文件,此样式文件中设置的样式会全局生效,可将公共样式放到此文件中

2)入口html文件
在 src/pages目录下创建document.ejs文件,文件内容为html,此文件默认是umi的入口html文件,类似于Vue项目中public/index.html文件

5. Umi的其他常用配置说明

1)devServer
如果你想像Vue中,在vue.config.js配置服务器端口号之类的信息可以使用devServer配置。

import { defineConfig } from 'umi';export default defineConfig({devServer: {port: 3000,}
})

2)chainWebpack

如果你想要修改webpack配置,或使用各种webpack插件,可通过此配置来实现

import { defineConfig } from 'umi';
import XXPlugin from 'xx-plugin'export default defineConfig({chainWebpack(config, { webpack }) {config.plugin('XXPlugin').use(XXPlugin);}
})

3) dynamicImport
启用按需加载

4)hash

如果配置了hash: true , 会让dist目录下生成的文件包含 hash 后缀,如下logo.[hash字符].png

+ dist- logo.sw892d.png- umi.df723s.js- umi.8sd8fw.css- index.html

5)alias

Vue:

chainWebpack: (config) => {config.entry('app').clear()config.entry('app').add('./src/main.js')config.resolve.alias.set('@', resolve('src')).set('@utils', resolve('src/utils')).set('@assets', resolve('src/assets'))}

Umi:

import { defineConfig } from 'umi';export default defineConfig({// 配置别名,对引用路径进行映射。alias: {'@utils': '/src/utils','@assets': '/src/assets'}
})

6)history
可通过history配置哈希路由,注意不要和hash配置混淆。

import { defineConfig } from 'umi';export default defineConfig({// 配置路由模式为hash模式,type可选 browser、hash 和 memory,默认browserhistory: { type: 'hash' }
})

7) theme
如果想要定制不同主题,可通过theme配置主题样式变量,变量为less变量

// config.ts
import { defineConfig } from 'umi';
import theme from './theme';export default defineConfig({theme: theme
})
// theme.ts
export default {'@headerColor': '#0099FF','@menuFontColor': '#001949',
};

8)cssLoader
若希望将 ClassName 类名变成驼峰命名形式,可设置

import { defineConfig } from 'umi';export default defineConfig({cssLoader: {localsConvention: 'camelCase',}
})

设置之后,在具体页面中,className会被解析成驼峰形式

import React from 'react';import styles from './index.less'; // .bar-foo { font-size: 16px; }export default () => <div className={styles.barFoo}>Hello</div>;
// => <div class="bar-foo___{hash}">Hello</div>

9)外部jscss文件引入
如果想要引入其他的外部css文件或js文件,如iconfont字体文件等,可通过scriptsstyles配置进行设置

import { defineConfig } from 'umi';export default defineConfig({scripts: ['//at.alicdn.com/t/font_XXXX.js', 'XXX.js'],styles: ['//at.alicdn.com/t/font_XXXX.css', 'XXX.css'],
})

更多配置请参考官方文档配置说明:https://umijs.org/zh-CN/config

注意:若你在项目中进行了静态化配置,你会发现你在通过路由访问页面的时候无法访问到对应的页面,需要加一个.html后缀才能正常访问。如http://127.0.0.1/login路由页面需要访问http://127.0.0.1/login.html才能正常访问页面(坑~,初次配置的时候不小心加了这个配置,结果找了好久路由无法访问页面的问题!)

// 如果htmlSuffix为true,umi生成的路由文件会自动加上.html后缀
exportStatic: {htmlSuffix: true
},

还有一点需要注意,如果你发现你的项目采用的是 history 模式,且部署到服务器上之后,刷新页面时路由地址会自动追加一个一个 / ,导致页面访问空白或重定向,但本地调试不会有问题,这也有可能是配置里配置了 exportStatic 的问题,需要注意的是,即使没有配置htmlSuffix 仅仅是空的 exportStatic: {} 配置也不行!

具体问题参考umi的github issues: 项目部署后,浏览器刷新后,url pathname尾部会多出一个 / #9140

四、项目目录结构(参考)


├── config├── config.ts
├── dist
├── mock
├── public
└── src├── .umi├── api├── assets├── components├── utils├── layouts├── index.less└── index.tsx├── pages└── login├── index.less└── index.tsx├── app.ts└── global.less 
├── .env
├── .editorconfig
├── .eslintrc.js
├── .eslintignore
├── .stylelintrc.js
├── .stylelintignore
├── tsconfig.json
├── package.json
├── README.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础知识:整理2 列表的相关操作

1. 查找某元素在列表中的下标索引 2. 在具体的位置插入一个元素 3. 在列表的尾部追加元素 4. 追加元素方式2 5. 删除元素 6. 删除元素方式2 7. 删除元素方式3 8. 清空列表 9. 统计某个元素在列表中出现的次数 10. 统计列表中所有元素的数量 11. 定义空列表

vim配置php开发环境

vim是很多程序员喜爱的代码编辑器&#xff0c;对于phper来说&#xff0c;我们需要配置和添加一些插件来方便我们进行开发。下面是一些常用的配置。 安装Vundle Vundle是Vim的插件管理器&#xff0c;它使得安装和管理插件变得更加方便。可以使用以下命令安装Vundle&#xff1a…

计算机网络实验(六):三层交换机实现VLAN间路由

一、实验名称:三层交换机实现VLAN间路由 二、实验原理 2.1. VLAN基本配置 在交换网络中,为了实现对物理网络的逻辑划分,引入了VLAN(虚拟局域网)的概念。VLAN通过将不同的设备划分到不同的虚拟网络中,实现了逻辑隔离。基本配置包括在交换机上创建VLAN、将端口划分到相应…

初识Java并发,一问读懂Java并发知识文集(3)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【算法专题】二叉树中的深搜(DFS)

二叉树中的深搜 深搜1. 计算布尔二叉树的值2. 求根节点到叶节点数字之和3. 二叉树剪枝4. 验证二叉搜索树5. 二叉搜索树中第K小的元素6. 二叉树的所有路径 深搜 深度优先遍历&#xff08;DFS&#xff0c;全称为 Depth First Traversal&#xff09;&#xff0c;是我们树或者图这…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 开发板详情与规格

本文主要参考&#xff1a; BQ3588C_开发板详情-开源鸿蒙技术交流-Bearkey-开源社区 BQ3588C_开发板规格-开源鸿蒙技术交流-Bearkey-开源社区 厦门贝启科技有限公司-Bearkey-官网 1. 开发板详情 RK3588 核心板是一款由贝启科技自主研发的基于瑞芯微 RK3588 AI 芯片的智能核心…

word 常用功能记录

word手册 多行文字对齐标题调整文字间距打钩方框插入三线表插入参考文献自动生成目录 多行文字对齐 标题调整文字间距 打钩方框 插入三线表 插入一个最基本的表格把整个表格设置为无框线设置上框线【实线1.5磅】设置下框线【实线1.5磅】选中第一行&#xff0c;设置下框线【实线…

SpringBoot整合Elasticsearch报错

本文来记录一下SpringBoot整合Elasticsearch报错 文章目录 报错如下报错原因es7.15.2版本下载 报错如下 2024-01-02 15:09:10.349 ERROR 134936 --- [nio-8088-exec-6] o.a.c.c.C.[.[.[/]. [dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in c…

NGUI基础-图集制作(保姆级教程)

目录 图集是什么 如何打开图集制作工具 制作步骤 图集的三个关键配置 相关参数介绍 Atlas Material Texture Padding Tim Alpha PMA shader Unity Packer TrueColor Auto-upgrade Force Square Pre-processor 图集是什么 Unity图集&#xff08;Sprite Atlas&…

Rust基础语法判断语句读取命令行里边的数字使用match和if进行判断

use std::str::FromStr; use std::env;fn main() {// 新建一个let mut numbers Vec::new();for arg in env::args().skip(1){numbers.push(u64::from_str(&arg).expect("error parsing argument"));}if numbers.len() 0 || numbers.len() > 1 {eprint!(&quo…

IDEA2023 最新版详细图文安装教程(安装+运行测试+汉化+背景图设置)

IDEA2023 最新版详细图文安装教程 名人说&#xff1a;工欲善其事&#xff0c;必先利其器。——《论语》 作者&#xff1a;Code_流苏(CSDN) o(‐&#xff3e;▽&#xff3e;‐)o很高兴你打开了这篇博客&#xff0c;跟着教程去一步步尝试安装吧。 目录 IDEA2023 最新版详细图文安…

skynet 配置中lua服务创建流程

众所周知&#xff0c;skynet必须配置启动脚本&#xff0c;比如说如下配置 thread8 loggernil harbor0 start"main" lua_path"./skynet/lualib/?.lua;./skynet/lualib/?/init.lua;" luaservice"./skynet/service/?.lua;./app/?.lua;" lualoa…

linux挂载未分配的磁盘空间

目录 1.先查看是否有未分配的磁盘空间 2.分区 3.格式化新分区&#xff08;这里以ext4为例&#xff09; 4.创建一个目录用于挂载 5.将新分区挂载到目录 6.查看新的磁盘分区情况 7.配置系统在启动时自动挂载 1.先查看是否有未分配的磁盘空间 lsblk 可以看到/dev/vdb 是…

力扣_day1

两数之和 hash表的时间复杂度为什么是O(1)&#xff1f; hash表是基于数组链表的实现的。数组在内存中是一块连续的空间&#xff0c;只要知道查找数据的下标就可快速定位到数据的内存地址&#xff0c;即数组查找数据的时间复杂度为O(1)。 能用一次循环解决问题就用一次循环。…

面试经典150题(59-61)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第二十九天&#xff09;完成了3道(59-61)150&#xff1a; 59.&#xff08;146. LRU 缓存&#xff09;题目描述&#xff1a; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUC…

EBU7140 Security and Authentication(三)密钥管理;IP 层安全

B3 密钥管理 密钥分类&#xff1a; 按时长&#xff1a; short term&#xff1a;短期密钥&#xff0c;用于一次加密。long term&#xff1a;长期密钥&#xff0c;用于加密或者授权。 按服务类型&#xff1a; Authentication keys&#xff1a;公钥长期&#xff0c;私钥短期…

算法训练第五十六天|583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作&#xff1a; 题目链接 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 : 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一…

python区别与C++的总结

数据类型 Python: 动态类型系统&#xff1a;类型在运行时自动检测&#xff0c;无需显式声明。内建类型&#xff1a;包括 int, float, str, bool, list, tuple, dict, set等。一切皆对象&#xff1a;所有数据类型都是对象&#xff0c;包括函数和类。没有原始数组&#xff1a;P…

Chocolatey

Chocolatey Software | PHP (Hypertext Preprocessor) 8.3.1 msi安装包https://github.com/chocolatey/choco/releases/download/2.2.2/chocolatey-2.2.2.0.msi 设置/安装 巧克力味Chocolatey CLI &#xff08;choco&#xff09;设置/安装 要求 受支持的 Windows 版本Windows …

webman插件创建

webman插件创建 介绍 应用插件实际上是一个完整的应用&#xff0c;它能以插件的形式安装到主项目中&#xff0c;使主项目快速获得某个模块功能。 例如&#xff1a;主项目需要一个问答系统&#xff0c;则可以安装一个问答应用插件&#xff0c;需要一个商城系统&#xff0c;则安…