通过Umijs从0到1搭建一个React项目

有一阵时间没写react了,今天通过umi搭建一个demo项目复习一下react;umi是一个可扩展的企业级前端应用框架,在react市场中还是比较火的一个框架。

Umi官方文档:Umi 介绍 (umijs.org)

一、构建项目。

1、安装包管理工具。

官方推荐使用pnpm,我也一直在使用pnpm,如果没有请执行以下命令自行安装。

npm install -g pnpm

2、构建项目。

根据官方文档的说明,我们在已经创建好的项目文件下打开终端,输入以下命令创建umi项目

pnpm dlx create-umi@latest

根据提示一步一步选择想要的模板类型即可,我选择了Simple App,pnpm,以及taobao镜像源。

3、启动项目

上面执行完成后,我们需要启动项目,直接输入以下命令即可启动项目

pnpm start

点击链接即可看到我们以及搭建好的项目了。

二、引入依赖插件

umi的项目创建好就会自动下载好node_modules依赖包,但是像UI库这类的还是没有的,我们还是需要去手动安装下载。

1、UI组件库。

我以antd为例进行下载,执行以下命令。

pnpm install antd

安装完成后直接在页面里导入antd组件即可,非常简单,你也可以使用umi插件里的antd

2、网络请求

你可以直接下载请求库,例如axios;但这里可以使用umi官方的插件,在插件里也有请求插件,执行以下命令下载插件。

详细文档:请求 (umijs.org)

pnpm add -D @umijs/plugins

引入插件,打开.umirc.ts或者config.ts(可以先看第三部分),将对应的插件引入,我这里直接引入了三个插件,antd,request,model

//config.ts

import { defineConfig } from "umi";
import routers from "./routers";
const { UMI_ENV } = process.env; // 打包环境变量
export default defineConfig({
    routes: routers,
    npmClient: 'pnpm',
    publicPath: "/",
    plugins:['@umijs/plugins/dist/antd', '@umijs/plugins/dist/request','@umijs/plugins/dist/model'],
    antd: {},
    model: {},
    request: {},
});
console.log(UMI_ENV)

使用

import {request} from '@umijs'

let url = '请求地址'
let options ={
    method: 'get',
    params: {},
    url: url
}
export const requestFun = async () =>{
    return await request(url,options)
}

3、状态管理(数据共享)

一般来说在react中经常使用redux进行状态管理,但是在umi中推荐一种数据流model模块化管理。

详细文档:数据流 (umijs.org)

在plugins中导入'@umijs/plugins/dist/model'插件,在项目中创建一个models目录,在目录下创建组件对应的一个文件,例子如下

在对应的文件下用useModel引入model的名字,就可以访问model里的数据和方法了。

三、多环境配置。

在开发过程中,我们需要多种环境,开发环境、测试环境、以及生产环境等,那么则需要我们进行配置不同的环境。

首先我们在目录中找到.umirc.ts文件,这个文件是umi的环境配置文件,我们希望可以进行多环境管理,则这个文件就不需要了,我们需要在根目录下创建config目录创建config配置文件,因为config配置文件没有.umirc.ts优先级高,则需要将.umirc.ts删掉。

1、创建config目录。

在目录下创建config.ts、config.dev.ts、config.pro.ts、routers.ts文件

//config.ts

import { defineConfig } from "umi";
import routers from "./routers";
const { UMI_ENV } = process.env; // 打包环境变量
export default defineConfig({
    routes: routers,
    npmClient: 'pnpm',
    publicPath: "/",
});
console.log(UMI_ENV)
//config.dev.ts

import { defineConfig } from "umi";
const { UMI_ENV } = process.env; // 打包环境变量
export default defineConfig({
    define:{
        UMI_ENV:UMI_ENV,
        BASE_SERVER:'开发环境'
    }
});
//config.pro.ts

import { defineConfig } from "umi";
const { UMI_ENV } = process.env; // 打包环境变量
export default defineConfig({
    define:{
        UMI_ENV:UMI_ENV,
        BASE_SERVER:'生产环境'
    }
});
//routers.ts

const routes=[
    { path: "/", component: "index" },
    { path: "/docs", component: "docs" },
]
export default routes

2、编写执行脚本

在编写脚本之前,我们还需要下载cross-env环境变量管理工具

pnpm install cross-env -D

然后在package.json文件中编写执行脚本:

  "scripts": {
    "dev": "cross-env UMI_ENV=dev umi dev",
    "build": "cross-env UMI_ENV=pro umi build",
    "postinstall": "umi setup",
    "setup": "umi setup",
    "start": "npm run dev"
  },

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js原型和类---prototype,__proto__,new,class

原型和原型链 在js中,所有的变量都有原型,原型也可以有原型,原型最终都指向Object 什么是原型 在js中,一个变量被创建出来,它就会被绑定一个原型;比如说,任何一个变量都可以使用console.log打…

支持向量机 (support vector machine,SVM)

支持向量机 (support vector machine,SVM) flyfish 支持向量机是一种用于分类和回归的机器学习模型。在分类任务中,SVM试图找到一个最佳的分隔超平面,使得不同类别的数据点在空间中被尽可能宽的间隔分开。 超平面方…

数据采集:如何使用八爪鱼采集BOSS直聘职位数据

大家好,我是水哥! 今天给大家分享的是数据采集实战:使用「八爪鱼」第三方工具来采集 BOSS 直聘上的数据分析职位数据。 接下来,我们详细看一看。 不重复造轮子 在工作中,我们一定要形成一个认知,能用第…

初次用bable遍历vue项目下的中文

利用 babel 找到 AST 中的中文 // vite-plugin-babel-transform.js const parser require(babel/parser) const traverse require(babel/traverse).default // const types require(babel/types) // const generate require(babel/generator).default const fs require(f…

.Net C#执行JavaScript脚本

文章目录 前言一、安装二、执行 JavaScript 脚本三、与脚本交互四、JS 调用 C# 方法五、多线程使用总结 前言 ClearScript 是一个 .NET 平台下的开源库,用于在 C# 和其他 .NET 语言中执行脚本代码。它提供了一种方便和安全的方法来将脚本与应用程序集成,…

使用Go编写的持续下行测速脚本,快速消耗流量且不伤硬盘

介绍 使用go语言编写的持续下行测速脚本,可用于任意平台使用,通过指定URL清单文本文件自动遍历测速,支持多线程,支持多平台 特性 轻量级,无依赖采用内存进行缓存数据,不占用磁盘(如果内存较小请使用gcd项目),最大程度减少磁盘IO,保护硬盘寿命可自定义最大下载文件…

Hum Brain Mapp:青春期早期的灰质流失可以用白质生长来解释吗?

摘要 关于大脑发育的一个基本谜题是,为什么儿童进入青春期时,灰质(GM)体积明显减少,而白质(WM)体积明显增加。一种流行的理论认为,由于被修剪的突触太小而不足以影响脑灰质体积,因此大脑总体积保持稳定,而…

Puppeteer 是什么以及如何在网络抓取中使用它 | 2024 完整指南

网页抓取已经成为任何处理网页数据提取的人都必须掌握的一项重要技能。无论你是开发者、数据科学家还是希望从网站收集信息的爱好者,Puppeteer都是你可以使用的最强大工具之一。本完整指南将深入探讨什么是Puppeteer以及如何有效地在网页抓取中使用它。 Puppeteer简…

wifi模组Ai-M62-32S的IO映射和UDP透传测试

wifi模组Ai-M62-32S的IO映射和UDP透传测试 基本IO 映射配网示例开启UDP透传示例复位AT查询wifi是否在线配置DHCP静态IP连接wifi连接UDP开启透传 基本IO 映射 对于wifi模组Ai-62-32S来说其模组 IO 引脚(从模组左上角逆时针排序,引脚序号从 1 开始&#x…

LeetCode 2 两数相加

题目 给你两个 非空 的链表,表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字 请你将两个数相加,并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外,这两个数都不会以…

小程序需要进行软件测试吗?小程序测试有哪些测试内容?

在如今移动互联网快速发展的时代,小程序已成为人们生活中不可或缺的一部分。然而,面对日益增长的小程序数量和用户需求,小程序的稳定性和质量问题日益突显。因此,对小程序进行软件测试显得尤为重要。 近期的一项调查显示&#xf…

鸿蒙语言基础类库:【@ohos.util (util工具函数)】

util工具函数 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 该模块…

3d已经做好的模型怎么改单位?---模大狮模型网

在展览3D模型设计行业中,经常会遇到需要将已完成的模型进行单位转换的需求。这可能涉及从一种度量单位转换为另一种,例如从英制单位转换为公制单位,或者根据特定的展览场地要求进行尺寸调整。本文将探讨如何有效地修改已完成的3D模型的单位&a…

js实现图片放大镜功能,简单明了

写购物项目的时候&#xff0c;需要放大图片&#xff0c;这里用js写了一个方法&#xff0c;鼠标悬浮的时候放大当前图片 这个是class写法 <!--* Descripttion: * Author: 苍狼一啸八荒惊* LastEditTime: 2024-07-10 09:41:34* LastEditors: 夜空苍狼啸 --><!DOCTYPE …

【CSS in Depth 2 精译】2.4 视口的相对单位

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位 ✔️2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.4 视口的相对单位 前面介绍过的 em 和 rem 是相对于 font-size 定义的&#xff0…

【Pikachu靶场】安装部署通关详解超详细!!!(持续更新)

安装部署 Pikachu靶场&#xff0c;是一个带有漏洞的Web应用系统&#xff0c;在这里包含了常见的web安全漏洞。使用世界上最好的语言PHP进行开发-_-&#xff0c;数据库使用的是mysql&#xff0c;因此运行Pikachu你需要提前安装好"PHPMYSQL中间件&#xff08;如apache,ngin…

【HTML入门】第八课 - 链接的学习(二)

我们上一节学习了&#xff0c;链接的基本知识&#xff0c;有锚点&#xff0c;还有鼠标上移的title属性的作用&#xff0c;这一节&#xff0c;我们继续说链接的知识点。 目录 1 跳转本项目的网页 1.1 修改html文件名 1.2 新建index1.html文件 1.3 修改index1.html文件 1.4…

python7:装饰器

目录 1.调用外部程序os.system-阻塞式调用subprocess-python中的模块 2.装饰器前戏作用域&#xff08;1&#xff09;全局和局部-就近原则&#xff08;2&#xff09;嵌套作用域&#xff08;3&#xff09;内置作用域、变量 高阶函数&#xff1a;函数是最高级的对象&#xff08;1&…

几种不同的方式禁止IP访问网站(PHP、Nginx、Apache设置方法)

1、PHP禁止IP和IP段访问 <?//禁止某个IP$banned_ip array ("127.0.0.1",//"119.6.20.66","192.168.1.4");if ( in_array( getenv("REMOTE_ADDR"), $banned_ip ) ){die ("您的IP禁止访问&#xff01;");}//禁止某个IP段…

【Linux操作系统-测试】第三节.Linux 系统、网络信息、用户权限命令总结

文章目录 前言一、Linux 系统相关信息命令 1.1 df 命令--查看磁盘剩余 1.2 ps 命令--查看进程 1.3 top 命令--显示进程运行状态 1.4 kill 命令说明 -- 杀死进程二、Linux 网络信息命令 2.1 ping 命令--检查网络是否连通 2.1 ifconfig--显示网络设…