当前位置: 首页 > news >正文

手把手教你用Vite构建第一个Vue3项目

写在前面

在之前的文章中写过“如何创建第一个vue项目”,但那篇文章写的是创建vue2的 项目。

传送门如何创建第一个vue项目

打开Vue.js官网:https://cn.vuejs.org/,我们会发现Vue 2 将于 2023 年 12 月 31 日停止维护

vue2停止维护

虽然Vue2的项目还不少,但是官方尤大大都在拥抱Vue3

那我们也不能落后啊,今天就来说说怎么创建第一个Vue3项目。

并安装Element Plus 及一些常用配置,最终实现一个简单页面
增删改查

一、工具简介

这里我们简单介绍一下文章中使用到的工具,使用这些工具可以提高我们开发效率。

当然了只有nodejs 是必须要安装的,nvm ViteNRM 这些都不是必须的,

1.1 nvm nodejs管理工具

nvm全名node.js version management,顾名思义是一个nodejs的版本管理工具。

通过它可以安装切换不同版本的nodejs

1.2 node.js js运行环境

Node.js 就不用多说了,官方解释:Node.js is an open-source, cross-platform JavaScript runtime environment.
翻译过来:Node.js是一个开源、跨平台的JavaScript运行时环境。

1.3 Vite 前端构建工具

Vite是尤雨溪团队开发的,官方称是下一代新型前端构建工具,能够显著提升前端开发体验。

上面称是下一代,当前一代当然是我们熟悉的webpack

Vite 优势

  • 开发环境中,无需打包操作,可快速的冷启动。
  • 轻量快速的热重载(HMR)。
  • 真正的按需编译,不再等待整个应用编译完成。

Vite 官网:https://cn.vitejs.dev/

1.4 NRM镜像管理工具

nrm 全称是:(npm registry manager) 是npm的镜像管理工具

有时候国外的资源太慢,使用它就可以快速地在npm镜像源间快速切换

二、安装上面工具

2.1 nvm 安装与使用

2.1.1 nvm下载

①github下载
https://github.com/coreybutler/nvm-windows/releases

GitHub下载nvm

②百度网盘下载

有的小伙伴可能打开GitHub网站比较忙,贴心的我帮大家准备了百度网盘下载

链接:https://pan.baidu.com/s/18FZuhmw7OCFeLFpQmf7u6w
提取码:lnaf

2.1.2 nvm 安装

① 双击nvm-setup.exe可执行文件

双击可执行文件

② 选择nvm安装路径
选择nvm安装路径

③选择nodejs安装路径
选择nodejs安装路径

④安装
安装

⑤检查是否安装成功

C:\Users\xiezhr>nvm version
1.1.9

⑥ nvm 常用命令

# 显示可以安装的所有nodejs版本
nvm list available # 安装指定版本的nodejs
nvm install <version> 
# 显示已安装版本列表
nvm list
# 使用指定版本node
nvm use [version]
# 卸载指定版本node
nvm uninstall <version>

2.2 nodejs安装

2.2.1 nodejs官网

官网: https://nodejs.org/en/

nodejs官网

2.2.2 查看nodejs 所有版本

上一小节中安装好的nvm,既然nvm是nodejs管理工具,我们这里就是用nvm 查看node.js 版本,安装nodejs

nvm list available 查看版本

C:\Users\xiezhr>nvm list available
|   CURRENT    |     LTS      |  OLD STABLE  | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
|   18.10.0    |   16.17.1    |   0.12.18    |   0.11.16    |
|    18.9.1    |   16.17.0    |   0.12.17    |   0.11.15    |
|    18.9.0    |   16.16.0    |   0.12.16    |   0.11.14    |
|    18.8.0    |   16.15.1    |   0.12.15    |   0.11.13    |
|    18.7.0    |   16.15.0    |   0.12.14    |   0.11.12    |
|    18.6.0    |   16.14.2    |   0.12.13    |   0.11.11    |
|    18.5.0    |   16.14.1    |   0.12.12    |   0.11.10    |
|    18.4.0    |   16.14.0    |   0.12.11    |    0.11.9    |
|    18.3.0    |   16.13.2    |   0.12.10    |    0.11.8    |
|    18.2.0    |   16.13.1    |    0.12.9    |    0.11.7    |
|    18.1.0    |   16.13.0    |    0.12.8    |    0.11.6    |
|    18.0.0    |   14.20.1    |    0.12.7    |    0.11.5    |
|    17.9.1    |   14.20.0    |    0.12.6    |    0.11.4    |
|    17.9.0    |   14.19.3    |    0.12.5    |    0.11.3    |
|    17.8.0    |   14.19.2    |    0.12.4    |    0.11.2    |
|    17.7.2    |   14.19.1    |    0.12.3    |    0.11.1    |
|    17.7.1    |   14.19.0    |    0.12.2    |    0.11.0    |
|    17.7.0    |   14.18.3    |    0.12.1    |    0.9.12    |
|    17.6.0    |   14.18.2    |    0.12.0    |    0.9.11    |
|    17.5.0    |   14.18.1    |   0.10.48    |    0.9.10    |This is a partial list. For a complete list, visit https://nodejs.org/en/download/releases

nvm install [version] 安装我们需要的版本

# 安装16.17.1版本
C:\Users\xiezhr>nvm install 16.17.1
Downloading node.js version 16.17.1 (64-bit)...
Extracting...
CompleteInstallation complete. If you want to use this version, type
nvm use 16.17.1
2.2.3 使用指定版本的nodejs

如果我们在日常开发中用到多个版本的nodejs,我们电脑上也安装了多个版本的nodejs

这时候,我们就可以使用如下命令切换nodejs版本

C:\WINDOWS\system32>nvm use 16.17.1
Now using node v16.17.1 (64-bit)

小提示:在执行上面命令中可能会报如下错,只需要将cmd切换到管理员登录即可解决

报错提示

2.2.4 查看当前nodejs版本

当我们按照上面的方法切换了nodejs版本后,可以用如下命令查看当前nodejs版本信息

# 查看node版本
C:\Users\xiezhr>node -v
v16.17.1
# 查看npm版本
C:\Users\xiezhr>npm -v
8.15.0

2.3 镜像管理工具NRM 安装

2.3.1 安装NRM

输入npm install -g nrm 后回车即可全局安装NRM镜像管理工具

C:\Users\xiezhr>npm install -g nrm
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142added 58 packages in 6s
npm notice
npm notice New minor version of npm available! 8.15.0 -> 8.19.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v8.19.2
npm notice Run npm install -g npm@8.19.2 to update!
npm notice
2.3.2 nrm镜像管理工具使用

我们可以通过如下常用nrm命令管理npm镜像

# 查看镜像列表
nrm ls
# 查看当前使用的镜像
nrm current 
# 添加镜像
nrm add <名称> <远程地址或私服地址>
# 删除镜像
nrm del <名称>
# 切换镜像
nrm use <名称> 
# 测试镜像网络传输速度
nrm test <名称>
# 查看nrm版本号
nrm <-version | -V> 
# 查看nrm相关信息
nrm <-help | -h>
# 打开镜像主页
nrm home <名称> [browser]
# 上传npm包或命令程序
nrm publish [<tarball>|<folder>]

查看镜像列表

image-20230902110743824

三、创建Vue3项目

我们到官网 https://cn.vitejs.dev/guide/ 根据官网一步步往下走即可

**兼容性注意:**Vite 需要 Node.js 版本 14.18+,16+。

然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

① 使用npmyarn pnpm 其中一种命令安装即可

pnpm 是集合了npmyarn 优点的,在使用前需要先安装

使用 NPM:

$ npm create vite@latest

使用 Yarn:

$ yarn create vite

使用 PNPM:

$ pnpm create vite

② 输入vue项目名称,我们这里就叫vite-project

输入项目名称

③选择使用哪种框架,这里我们当然是选择Vue 了

Vite 不仅仅支持Vue 框架,还支持React、Vanilla、Lit 等前端主流框架

选择Vue框架

④ 选择Javascript 和TypeScript

Vue3 已经全面拥抱TypeScript,所以这里我们就选择TypeScript

选择TypeScript

⑤ 到此我们就创建完成了,是不是很简单了

构建完成

⑥ 我们按照上面提示,进入到 vite-project 项目路径下 按照依赖

# 切换到项目跟目录
cd vite-project
# 安装依赖
npm install

安装依赖

⑦ 启动Vue 项目

输入如下命令启动我们创建好的Vue项目

# 启动项目
npm run dev

当控制台看到如下所示,说明启动成功了

启动成功

浏览器打开 http://127.0.0.1:5173/

浏览器打开

四、项目结构介绍

通过Vite创建好的Vue 项目机构如下所示

4.1 项目结构

Vue项目目录

里面需要重点关注的,我用小红旗和小星星标注了

项目结构说明

4.2 index.html

首页文件的初始代码如下:

<!doctype html>
<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/vite.svg" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Vite + Vue + TS</title></head><body><div id="app"></div><script type="module" src="/src/main.ts"></script></body>
</html>

这就是一个普普通通的html文件,让它与众不同的是<div id="app"></div>

整个项目只有这一个 html 文件,所以这是一个 单页面应用,当我们打开这个应用,表面上可以有很多页面,实际上它们都只不过在一个 div 中

4.3 App.vue

上面图中我把这个文件称为“父组件”,因为其它的组件都是这个的儿子组件

.vue 文件是vue 中自定义的文件类型,我们把它看作成html即可,可以在里面写标签元素、css样式、js/ts代码

我们来看看其初始化的代码

<script setup lang="ts">
import HelloWorld from './components/HelloWorld.vue'
</script><template><div><a href="https://vitejs.dev" target="_blank"><img src="/vite.svg" class="logo" alt="Vite logo" /></a><a href="https://vuejs.org/" target="_blank"><img src="./assets/vue.svg" class="logo vue" alt="Vue logo" /></a></div><HelloWorld msg="Vite + Vue" />
</template><style scoped>
.logo {height: 6em;padding: 1.5em;will-change: filter;transition: filter 300ms;
}
.logo:hover {filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {filter: drop-shadow(0 0 2em #42b883aa);
}
</style>

我们不要被这么多的代码吓到了,仔细一看,你会发现都是我们熟悉的。

  • 标签中书写js/ts代码
  • 标签中写页面代码

  • 中写css 样式

我们看不懂的可能只有import HelloWorld from './components/HelloWorld.vue'<HelloWorld msg="Vite + Vue" /> 这两句

这里其实就是前面我们说的App.vue 是所有组件的父组件。

在父组件中引入了子组件 ,并给子组件传递了一个字符串参数msg="Vite + Vue"

4.4 HelloWorld.vue

这是一个子组件,供父组件调用

我们来看看其中代码

<script setup lang="ts">
import { ref } from 'vue'defineProps<{ msg: string }>()const count = ref(0)
</script><template><h1>{{ msg }}</h1><div class="card"><button type="button" @click="count++">count is {{ count }}</button><p>Edit<code>components/HelloWorld.vue</code> to test HMR</p></div><p>Check out<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank">create-vue</a>, the official Vue + Vite starter</p><p>Install<a href="https://github.com/vuejs/language-tools" target="_blank">Volar</a>in your IDE for a better DX</p><p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template><style scoped>
.read-the-docs {color: #888;
}
</style>

结合页面,我们猜一猜都知道,页面上有一个计数器,就是在这里实现的了

我们来看看我们看不懂的,

  • import { ref } from 'vue' 表示从Vue库中导入 ref 函数,ref是一个响应式函数
  • defineProps<{ msg: string }>() 表示接收父组件App.vue 传递过来的msg参数
  • const count = ref(0) 创建一个响应式的数据引用,count 是一个变量名,ref(0) 表示将数字0作为初始值传递给 ref 函数,意味着当 count 的值发生变化时,相关的Vue组件会自动更新
  • {{ msg }} 是vue的插值语法,即将父组件传递过来的msg 信息显示出来

4.5 main.ts

main.ts 通常是应用程序的入口文件, App.vue就是通过这个文件和 index.html 里的 <div id="app"> 产生联系的

我们来看看具体代码

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'createApp(App).mount('#app')
  • import { createApp } from 'vue' 导入了 Vue 的 createApp 函数,用于创建一个 Vue 应用实例。
  • import './style.css' 导入了一个 CSS 文件,这里可以忽略
  • import App from './App.vue' 导入了根组件 App ,而App又包含了所有子组件
  • createApp(App).mount('#app') 创建了一个 Vue 应用实例,并将根组件 App 挂载到具有 idapp 的 DOM 元素上。

这样我们就将所有写的页面都挂在到了index.html文件上了,到这儿,是不是豁然开朗了呢

4.6 package.json 文件

到上一小节,我们已经将vue的代码分析的差不多了,接下来,我们在来看看package.json 项目依赖配置

{"name": "vite-project","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite","build": "vue-tsc && vite build","preview": "vite preview"},"dependencies": {"vue": "^3.3.4"},"devDependencies": {"@vitejs/plugin-vue": "^4.2.3","typescript": "^5.0.2","vite": "^4.4.5","vue-tsc": "^1.8.5"}
}

我们挑几个重要的说一说

  • "name": "vite-project" 指定项目的名称为 “vite-project”
  • "version": "0.0.0" :指定项目的版本号,这是一个初始版本号,后面如果项目升级新版本了,可以在这里定义
  • "scripts" :定义了一些脚本命令,用于开发、构建和预览项目
    • "dev": "vite" :启动开发服务器,用于在开发环境下运行项目。 我们前面通过npm run dev 就是在这儿配置的
    • "build": "vue-tsc && vite build" :我们使用TypeScript ,需要将 TypeScript 代码编译为 JavaScript才能运行
  • "dependencies" :列出了项目的生产环境依赖项。
    • "vue": "^3.3.4" :指定了 Vue 的版本为 3.3.4,这是项目所依赖的核心库。
  • "devDependencies" :列出了项目的开发环境依赖项。
    • "@vitejs/plugin-vue": "^4.2.3" :Vite 插件版本
    • "typescript": "^5.0.2" :TypeScript 编译器版本
    • "vite": "^4.4.5" :Vite 构建工具

五、集成Element Plus

5.1 安装Element Plus

打开官网:https://element-plus.gitee.io/zh-CN/guide/design.html

# 选择一个你喜欢的包管理器# NPM
$ npm install element-plus --save# Yarn
$ yarn add element-plus# pnpm
$ pnpm install element-plus

安装element-plus

5.2 如何在项目中使用Element Plus

官网提供了三种用法 完整引入、按需引入、手动导入,这里我们使用按需导入(可以使打包文件变小) 官方也推荐使用按需引入

① 首先需要安装unplugin-vue-componentsunplugin-auto-import这两款插件

npm install -D unplugin-vue-components unplugin-auto-import

image-20230902164045281

② 在 Vite 的配置文件vite.config.ts中 添加如下代码

import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'export default defineConfig({// ...plugins: [// ...AutoImport({resolvers: [ElementPlusResolver()],}),Components({resolvers: [ElementPlusResolver()],}),],
})

③ 添加全局配置

在引入 ElementPlus 时,可以在App.vue 中传入一个包含 sizezIndex 属性的全局配置对象。

  • size 用于设置表单组件的默认尺寸
  • zIndex 用于设置弹出组件的层级,zIndex 的默认值为 2000
<template><el-config-provider :size="size" :z-index="zIndex"></el-config-provider>
</template><script>
import { defineComponent } from 'vue'
import { ElConfigProvider } from 'element-plus'export default defineComponent({components: {ElConfigProvider,},setup() {return {zIndex: 3000,size: 'small',}},
})
</script>

5.3 添加一个按钮

我们将多余的代码删除,并添加一个element 样式的按钮

<script setup lang="ts"></script><template><el-button type="primary">使用element-plus的第一个按钮</el-button>
</template><style scoped></style>

添加一个按钮

六、配置@别名

我们将src 目录配置一个别名@ 这样我们开发中使用起来就很高效,在写路径的时候就不用../../ 这样写了

配置前写法

<img src="../../src/assets/images/password_icon.png" />

配置@后写法

<img src="@/assets/images/password_icon.png" />

@写法看起来是不是舒服多了呢

① 修改 vite.config.ts

注意: 这里的代码有一部分是有的,按需要添加,别添加错了

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'// 配置@别名import { resolve } from "path"; // https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],// ↓解析配置resolve: {// ↓路径别名alias: {"@": resolve(__dirname, "./src")}}
})

② 修改 tsconfig.json

{"compilerOptions": {"target": "ESNext",...// 配置@别名"baseUrl": ".","paths": {"@/*": ["src/*"]}, },
}

如果运行不了或报错尝试按下面命令安装下 @types/node ,没有报错可以不用安装,有安装也没事

 npm install @types/node 

③ 插件推荐

如果这里你使用vscode开发vue ,这里推荐一款插件给你Path-intellisense

image-20230902173845720

插件安装完成后,我们还需要做如下配置

打开设置

打开settings.json中配置

安装上面配置完成后,我们在书写路径的时候就有提示了~

路径提示

七、Element Plus Icon使用

Element Plus中将Icon 封装成了组件形式,我们不能想element-ui中那样使用了。

<!--原来使用方式-->
<i class="el-icon-edit"></i><!--现在使用方式--><el-icon :size="size" :color="color"><edit></edit></el-icon>

① 安装icon库

# 选择一个你喜欢的包管理器# NPM
$ npm install @element-plus/icons-vue
# Yarn
$ yarn add @element-plus/icons-vue
# pnpm
$ pnpm install @element-plus/icons-vue

安装icons-vue

② 按需引入Icon

<script setup lang="ts">import { Edit } from '@element-plus/icons-vue'</script><template><!-- <el-button type="primary">使用element-plus的第一个按钮</el-button> --><el-icon><Edit /></el-icon>
</template><style scoped></style>

icon出来了

八、一个简单页面带你入门

做完之后的效果,当然了还没有和后台交互,里面数据都是写死的。

增删改查

这个没啥难的用到什么控件就到element plus 官网找就可以了。下面是具体代码

App.vue 代码, 我们在App中引用 HelloWorld 组件,具体页面都在HelloWorld 组件中

注意: 这里引入 import zhCn from "element-plus/dist/locale/zh-cn.mjs"

let locale = zhCn

这块是为了解决分页显示英文问题,加上之后分页控件就正常显示中文了

<!-- App.vue--><script setup lang="ts">import { ElConfigProvider } from 'element-plus'
import zhCn from "element-plus/dist/locale/zh-cn.mjs"import HelloWorld from '@/components/HelloWorld.vue'// 切换为中文
let locale = zhCn</script><template><el-config-provider :locale="locale"><HelloWorld msg="Vite + Vue" />
</el-config-provider></template><style scoped></style>

HelloWorld.vue

这个文件没啥说的,基本上都是copy的

<script setup lang="ts">
import { ref } from 'vue'
import { Search } from '@element-plus/icons-vue';
import { Refresh } from '@element-plus/icons-vue';const currentPage4 = ref(4)
const pageSize4 = ref(100)
const small = ref(false)
const background = ref(false)
const disabled = ref(false)const handleSizeChange = (val: number) => {console.log(`${val} items per page`)
}
const handleCurrentChange = (val: number) => {console.log(`current page: ${val}`)
}let username = ref('')
let email = ref('')const query = () => {}const tableData = [{ username:"李莲花",sex:"男",age:38,email:"123456@qq.com",phone:12345678901,address:"莲花楼",},{username:"方多病",sex:"男",age:23,email:"fdb@qq.com",phone:1589999999,address:"天机堂",},{username:"笛飞声",sex:"男",age:39,email:"dfs@153.com",phone:13266666666,address:"金鸳盟",},{username:"乔婉娩",sex:"女",age:32,email:"qwm@163.com",phone:12345678901,address:"四顾门",},{username:"角丽谯",sex:"女",age:32,email:"jlq@163.com",phone:1258888888,address:"金鸳盟",},]
</script><template><el-card><div class="query-input"><el-input v-model="username" placeholder="请输入用户名"/><el-input v-model="email" placeholder="请输入邮箱"/><el-button type="primary" @click="query"> <el-icon><Search /></el-icon>查询</el-button><el-button type="danger" @click="query"><el-icon><Refresh /></el-icon>重置</el-button></div></el-card><el-card><el-table :data="tableData" stripe style="width: 100%"><el-table-column prop="username" label="姓名" width="180" /><el-table-column prop="sex" label="性别" width="180" /><el-table-column prop="age" label="年龄" width="180" /><el-table-column prop="email" label="邮箱" width="180" /><el-table-column prop="phone" label="电话" width="180" /><el-table-column prop="address" label="地址"  /><el-table-column fixed="right" label="操作" width="180"><template #default><el-button  type="primary" size="small" >编辑</el-button><el-button  type="danger" size="small">删除</el-button></template></el-table-column></el-table><div class="demo-pagination-block"><el-paginationv-model:current-page="currentPage4"v-model:page-size="pageSize4":page-sizes="[100, 200, 300, 400]":small="small":disabled="disabled":background="background"layout="total, sizes, prev, pager, next, jumper":total="400"@size-change="handleSizeChange"@current-change="handleCurrentChange"/></div></el-card>
</template><style scoped>.el-input {margin-right: 5px;width: 300px;}.query-input{display: flex;justify-content:center}.el-card{margin-bottom: 10px;}.demo-pagination-block{display: flex;justify-content: center;margin-top: 20px;}</style>

九、小结

这么一波操作下来,是不是很简单呢。Vite 构建Vue3项目,你学废了么?

基本上都是从官网copy过来改改就行了。

Vue2Vue3 变化还是挺多的,尤其是按需引入这个,写起来很烦。不过习惯就好了

本期内容到此就结束了,希望对你有所帮助 (●’◡’●)

下一期我们将要用SpringBoot 搭建后端部分,敬请期待哦~

我们下期再见 (●’◡’●)

相关文章:

手把手教你用Vite构建第一个Vue3项目

写在前面 在之前的文章中写过“如何创建第一个vue项目”&#xff0c;但那篇文章写的是创建vue2的 项目。 传送门如何创建第一个vue项目 打开Vue.js官网:https://cn.vuejs.org/&#xff0c;我们会发现Vue 2 将于 2023 年 12 月 31 日停止维护 虽然Vue2的项目还不少&#xff0…...

美创科技获通信网络安全服务能力评定(应急响应一级)认证!

近日&#xff0c;中国通信企业协会公布通信网络安全服务能力评定2023年第一批获证企业名单。 美创科技获得应急响应一级资质&#xff0c;成为2023年第一批获证企业之一&#xff01; 通信网络安全服务能力评定是对通信网络安全服务单位从事通信网络安全服务综合能力的评定&#…...

计算机视觉与人工智能在医美人脸皮肤诊断方面的应用

一、人脸皮肤诊断方法 近年来&#xff0c;随着计算机技术和人工智能的不断发展&#xff0c;中医领域开始逐渐探索利用这些先进技术来辅助面诊和诊断。在皮肤望诊方面&#xff0c;也出现了一些现代研究&#xff0c;尝试通过图像分析技术和人工智能算法来客观化地获取皮肤相关的…...

RCU501 RMP201-8 KONGSBERG 分布式处理单元

RCU501 RMP201-8 KONGSBERG 分布式处理单元 AutoChief600使用直接安装在主机接线盒中的分布式处理单元。进出发动机的所有信号都在双冗余CAN线路(发动机总线)上传输。 所有不重要的传感器都可以与K-Chief 600报警和监控系统共享&#xff0c;只需要一个主机接口。这一原则大大…...

说说 MVCC 的工作原理?

分析&回答 多版本并发控制(MVCC) InnoDB的MVCC&#xff0c;是通过在每行记录后面保存两个隐藏的列来实现。这两个列&#xff0c;一个保存了行的创建时间&#xff0c;一个保存行的删除时间&#xff0c;并不是实际的时间&#xff0c;而是系统版本号。每开始一个新的事务&am…...

微信小程序请求接口返回的二维码(图片),本地工具和真机测试都能显示,上线之后不显示问题

请求后端接口返回的图片&#xff1a; 页面展示&#xff1a; 代码实现&#xff1a; :show-menu-by-longpress"true" 是长按保存图片 base64Code 是转为base64的地址 <image class"code" :src"base64Code" alt"" :show-menu-by-long…...

Python小知识 - 1. Python装饰器(decorator)

Python装饰器&#xff08;decorator&#xff09; Python装饰器是一个很有用的功能&#xff0c;它可以让我们在不修改原有代码的情况下&#xff0c;为已有的函数或类添加额外的功能。 常见的使用场景有&#xff1a; a. 函数缓存&#xff1a;对于一些计算量较大的函数&#xff0c…...

如何访问GitHub

1、手动修改hosts 1.1、查找到最新的GitHub的hosts信息 通过链接&#xff1a;https://raw.hellogithub.com/hosts 进行查找最新的GitHub的hosts信息 1.2、查找到hosts文件位置 先找到 hosts 文件的位置&#xff0c;不同操作系统&#xff0c;hosts 文件的存储位置也不同&…...

【广州华锐互动】智能变电站AR仿真实训系统大大提高培训的效率和质量

随着电力行业的不断发展&#xff0c;变电站的建设和运维变得越来越重要。传统的变电站运维培训方式存在着诸多问题&#xff0c;如难以真实模拟变电站运行环境、信息传递不及时、难以掌握实际操作技能等问题。而智能变电站AR仿真实训系统可以为变电站运维人员带来全新的培训方式…...

手写Mybatis:第11章-流程解耦,封装结果集处理器

文章目录 一、目标&#xff1a;结果集处理器二、设计&#xff1a;结果集处理器三、实现&#xff1a;结果集处理器3.1 工程结构3.2 结果集处理器关系图3.3 出参参数处理3.3.1 结果映射Map3.3.2 结果映射封装3.3.3 修改映射器语句类3.3.4 映射构建器助手3.3.5 语句构建器调用助手…...

金融风控数据分析-信用评分卡建模(附数据集下载地址)

本文引用自&#xff1a; 金融风控&#xff1a;信用评分卡建模流程 - 知乎 (zhihu.com) 在原文的基础上加上了一部分自己的理解&#xff0c;转载在CSDN上作为保留记录。 本文涉及到的数据集可直接从天池上面下载&#xff1a; Give Me Some Credit给我一些荣誉_数据集-阿里云…...

ceph对象三元素data、xattr、omap

这里有一个ceph的原则&#xff0c;就是所有存储的不管是块设备、对象存储、文件存储最后都转化成了底层的对象object&#xff0c;这个object包含3个元素data&#xff0c;xattr&#xff0c;omap。data是保存对象的数据&#xff0c;xattr是保存对象的扩展属性&#xff0c;每个对象…...

使用 BERT 进行文本分类 (03/3)

一、说明 在使用BERT&#xff08;2&#xff09;进行文本分类时&#xff0c;我们讨论了什么是PyTorch以及如何预处理我们的数据&#xff0c;以便可以使用BERT模型对其进行分析。在这篇文章中&#xff0c;我将向您展示如何训练分类器并对其进行评估。 二、准备数据的又一个步骤 …...

Leetcode Top 100 Liked Questions(序号236~347)

236. Lowest Common Ancestor of a Binary Tree 题意&#xff1a;二叉树&#xff0c;求最近公共祖先&#xff0c;All Node.val are unique. 我的思路 首先把每个节点的深度得到&#xff0c;之后不停向上&#xff0c;直到val相同&#xff0c;存深度就用map存吧 但是它没有向…...

MySQL数据库学习【基础篇】

&#x1f4c3;基础篇 下方链接使用科学上网速度可能会更加快一点哦&#xff01; 请点击查看数据库MySQL笔记大全 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的…...

Kubernetes技术--k8s核心技术Service服务

1.service概述 Service 是 Kubernetes 最核心概念,通过创建 Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。 2.service存在的意义 -1:防止pod失联(服务发现) 我们先说一下什么叫pod失联。 -2:...

OpenHarmony 应用 ArkUI 状态管理开发范例

本文转载自《#2023 盲盒码 # OpenHarmony 应用 ArkUI 状态管理开发范例》&#xff0c;作者&#xff1a;zhushangyuan_ 本文根据橘子购物应用&#xff0c;实现 ArkUI 中的状态管理。 在声明式 UI 编程框架中&#xff0c;UI 是程序状态的运行结果&#xff0c;用户构建了一个 UI …...

二、QTableWidget 类 clear() 和 clearContents() 的区别及程序崩溃原因分析

问题描述&#xff1a;区分 QTableWidget 类的 clear() 和 clearContents() 的用法&#xff0c;以及可能由于这两个方法使用不当导致程序崩溃的原因分析 Qt 官方文档对 QTableWidget 类的 clear() 方法描述如下&#xff1a; [slot] void QTableWidget::clear() Removes all ite…...

spring boot 项目中搭建 ElasticSearch 中间件 一 postman 操作 es

postman 操作 es 1. 简介2. 环境3. postman操作索引3.1 创建索引3.2 查看索引3.3 查看所有索引3.4 删除索引 4. postman操作文档4.1 添加文档4.2 查询文档4.3 查询全部文档4.4 更新文档4.5 局部更新文档4.6 删除文档4.7 条件查询文档14.8 条件查询文档24.9 条件查询文档 limit4…...

设计模式—观察者模式(Observer)

目录 思维导图 一、什么是观察者模式&#xff1f; 二、有什么优点吗&#xff1f; 三、有什么缺点吗&#xff1f; 四、什么时候使用观察者模式&#xff1f; 五、代码展示 ①、双向耦合的代码 ②、解耦实践一 ③、解耦实践二 ④、观察者模式 六、这个模式涉及到了哪些…...

分类算法系列③:模型选择与调优 (Facebook签到位置预测)

目录 模型选择与调优 1、介绍 模型选择&#xff08;Model Selection&#xff09;&#xff1a; 调优&#xff08;Hyperparameter Tuning&#xff09;&#xff1a; 本章重点 2、交叉验证 介绍 为什么需要交叉验证 数据处理 3、⭐超参数搜索-网格搜索(Grid Search) 介绍…...

PCL RANSAC分割提取多个空间圆

目录 一、概述二、代码实现三、结果展示1、原始数据2、提取结果四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 使用PCL分割提取多个空间圆,其核心原理仍然是RANSAC拟合空间圆,这里只是做简单修改…...

Java八股文学习笔记day01

01.和equals区别 对于字符串变量来说&#xff0c;使用""和"equals"比较字符串时&#xff0c;其比较方法不同。""比较两个变量本身的值&#xff0c;即两个对象在内存中的首地址&#xff0c;"equals"比较字符串包含内容是否相同。 对于非…...

vant的NavBar导航栏可以自定义背景图片吗

可以的&#xff0c;Vant的NavBar导航栏提供了一个background-image属性&#xff0c;可以设置自定义背景图片。例 如&#xff1a; <van-nav-bar title"标题" left-text"返回" left-arrow background-image"url(https://example.com/image.jpg)&qu…...

深入浅出AXI协议(5)——数据读写结构读写响应结构

目录 一、前言 二、写选通&#xff08;Write strobes&#xff09; 三、窄传输&#xff08;Narrow transfers&#xff09; 1、示例1 2、示例2 四、字节不变性&#xff08;Byte invariance&#xff09; 五、未对齐的传输&#xff08;Unaligned transfers&#xff09; 六…...

IntelliJ Idea开发Vue遇到的几个问题

IntelliJ Idea开发Vue遇到的几个问题 确保 idea已安装插件【Vue.js】 问题1&#xff1a;ts方法错误 或 提示导入 import xxx.vue标红 解决办法&#xff1a;在 env.d.ts中添加以下代码(若无此文件&#xff0c;重新创建)&#xff1a; /* eslint-disable */ declare module *.…...

sql查找最晚一天/日期最大的一条记录 两种方法

例&#xff1a;查找最晚入职员工的所有信息 建表&#xff1a; CREATE TABLE employees ( emp_no int(11) NOT NULL, birth_date date NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender char(1) NOT NULL, hire_date date NOT NULL, PRIMA…...

详解python的

详解& 在Python中&#xff0c;使用&符号可以求取两种数据类型的交集&#xff1a; 集合&#xff08;Set&#xff09;&#xff1a;你可以使用&来计算两个集合的交集。例如&#xff1a; set1 {1, 2, 3, 4} set2 {3, 4, 5, 6} common_elements set1 & set2 pri…...

Modbus TCP通信笔记

目录 1 Modbus TCP 数据协议1.1 数据格式1.2 报文头(MBAP头)1.3 功能码1.4 Modbus 地址映射到 CPU 地址 2 Modbus TCP 通讯数据示例2.1 功能码01 读离散输出线圈2.2 功能码02 读离散输入线圈2.3 功能码03 读保持寄存器2.4 功能码04 读输入寄存器2.5 功能码05 写单个离散输出寄存…...

CIM和websockt-实现实时消息通信:双人聊天和消息列表展示

欢迎大佬的来访&#xff0c;给大佬奉茶 一、文章背景 有一个业务需求是&#xff1a;实现一个聊天室&#xff0c;我和对方可以聊天&#xff1b;以及有一个消息列表展示我和对方&#xff08;多个人&#xff09;的聊天信息和及时接收到对方发来的消息并展示在列表上。 项目框架概…...

做招投标有哪些网站/宁波网站优化公司推荐

Java泛型解析(02)&#xff1a;通配符限定考虑一个这种场景。计算数组中的最大元素。[code01]public class ArrayUtil {public static <T> T max(T[] array) {if (array null || 0 array.length) { return null ;}T max array[0];for (int i 1; i < array.length; …...

邯郸企业网站建设报价/百度广告关键词价格表

Sky数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25391 Accepted Submission(s): 14419 Problem DescriptionSky从小喜欢奇特的东西&#xff0c;而且天生对数字特别敏感&#xff0c;一次偶然的机会&…...

服务器如何做网站/百度搜索关键词优化方法

第5章 数据清洗与整理 pandas数据清洗&#xff1a;学会常见的数据清洗方法。数据合并&#xff1a;学会多源数据的合并和连接。数据重塑&#xff1a;针对层次化索引&#xff0c;学会stack和unstack的使用。字符串处理&#xff1a;学会DataFrame中字符串函数的使用。 5.1 数据清…...

什么样的蓝色做网站做好看/aso优化违法吗

改问题是"babel-eslint"版本更新问题导致的&#xff1b; 给大家一个最简单粗暴的解决方案&#xff1a; 在项目里找到对应的工程&#xff1a;直接删除里面的node_modules文件夹&#xff0c;然后重新npm install下就可以了&#xff1b; node_modules文件内容较多&#…...

wordpress接入打赏/企业网站设计

通过手机进行通信是可以实现很多遥控功能&#xff0c;虽然距离是比较短&#xff0c;一般是10米&#xff0c;但对于我这种新手做测试&#xff0c;比起买一个几百块的多通道遥控器成本要低很多。 实验目的&#xff1a;用Android实现蓝牙连接通过Arduino串口输出信息 这次使用的是…...

做音乐网站怎么放音乐/网推软件有哪些

零基础情况下&#xff0c;想学一门语言。其实python非常适合初学者入门。相比较其他不少主流编程语言&#xff0c;有更好的可读性&#xff0c;因此上手相对容易。那么如何快速掌握python? 设定目标&#xff1a;做 Python 开发除了熟悉语言本身之外&#xff0c;还需要掌握很多…...