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

使用 Vue 官方脚手架初始化 Vue3 项目

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

Vue 官网:https://vuejs.org/

Vue 官方文档:https://cn.vuejs.org/guide/introduction.html

Element Plus 官网:https://element-plus.org/

Tailwind CSS 官网:https://tailwindcss.com/

Tailwind CSS 中文文档 (73zls.com):https://tailwind.docs.73zls.com/docs/responsive-design
NPM 官网:https://www.npmjs.com/
Vite 官方中文文档:https://cn.vitejs.dev/

安装 Node 环境

首先,确保已经安装了 Node.js,可以在命令行中运行 node -vnpm -v 来检查它们是否已经正确安装:

image-20231210121140490

安装 Node.js 通常会自动附带安装 npm,所以你不需要单独安装 npm。只需确保 Node.js 版本符合要求即可。

切换 NPM 镜像源

使用 nrm 来管理 npm 镜像源可以帮助加速 npm 包的下载速度。

  1. 执行命令通过 npm 全局安装 nrm

    npm install -g nrm
    
  2. 使用 nrm ls 命令列出当前可用的镜像源,以及它们的地址和当前使用的镜像源:

    nrm ls
    
  3. 使用 nrm use 命令来切换想要使用的镜像源,例如,切换到淘宝镜像源:

    nrm use taobao
    
  4. 使用以下命令来验证切换是否成功:

    npm config get registry
    

安装 Pnpm 包管理工具

  1. 在命令行中执行以下命令全局安装 pnpm:

    npm install -g pnpm
    
  2. 安装完成后,可以使用 pnpm 来代替 npm 进行包管理。例如,使用以下命令来安装项目依赖:

    pnpm install
    

    这将使用 pnpm 来安装项目所需的包,而不是使用默认的 npm。

使用 Vue 官方脚手架初始化项目

  1. 切换到打算创建项目的目录,输入 cmd 打开命令行,之后在命令行中运行以下命令:

    pnpm create vue@latest
    
  2. 运行命令后使用方向键和回车键选择【否/是】开启或关闭某个功能:

    test

  3. 创建完项目之后,在命令行中继续输入以下命令运行项目:

    cd <your-project-name>
    pnpm i
    pnpm run dev --open
    

    test-1

认识 Vue 项目目录结构

Vue 3 项目的典型目录结构如下:

project-name/
├── public/                # 静态资源目录
│   └── favicon.ico        # 网站图标
├── src/                   # 源代码目录
│   ├── assets/            # 资源文件目录(图片、样式等)
│   ├── components/        # 组件目录
│   │   └── HelloWorld.vue # 示例组件
│   ├── router/            # 路由配置目录
│   │   └── index.ts       # 路由配置文件
│   ├── store/             # 状态管理目录
│   │   └── index.ts       # 状态管理配置文件(Pinia)
│   ├── views/             # 视图目录
│   │   └── Home.vue       # 示例视图组件
│   ├── App.vue            # 根组件
│   └── main.ts            # 项目入口文件(使用 TypeScript)
├── .eslintrc.js           # ESLint 配置文件
├── .gitignore             # Git 忽略文件配置
├── .prettierrc.json       # Prettier 配置文件
├── env.d.ts       		   # 声明文件,用于声明全局环境变量的类型
├── index.html       	   # 入口 HTML 文件
├── package.json           # 项目配置文件
├── README.md              # 项目说明文件
├── tsconfig.json          # TypeScript 配置文件
└── vite.config.js         # Vite 配置文件

统一包管理器工具下载依赖

  1. 创建scripts\preinstall.js文件,添加:

    if (!/pnpm/.test(process.env.npm_execpath || '')) {console.warn(`\u001b[33mThis repository must using pnpm as the package manager` +`for scripts to work properly.\u001b[39m\n`)process.exit(1)
    }
    
  2. 在 package.json 中配置命令:

    "scripts": {"preinstall":"node ./scripts/preinstall.js"
    }
    

    preinstall是 npm 提供的生命周期钩子,当我们使用 yarn 或 npm 来安装依赖的时候就会触发 preinstall

项目环境变量配置

没有基础的同学可以先去阅读下环境变量的文章:认识和使用 Vite 环境变量配置

  1. 在项目根目录(index.html 文件所在的位置)下创建对应环境的.env文件,然后在文件中定义对应环境下的变量,默认情况下只有以 VITE_ 为前缀的变量才会暴露给 Vite:

    • .env【默认配置】:

      # 项目标题
      VITE_APP_TITLE = OCTOPUS# 运行端口号
      VITE_PORT = 8080
      
    • .env.development【开发环境】:

      # 开发环境
      VITE_USER_NODE_ENV = development# 项目基本 URL
      VITE_BASE_URL = /dev/# 启动时自动打开浏览器
      VITE_OPEN = true
      
    • .env.production【生产环境】:

      # 生产环境
      VITE_USER_NODE_ENV = production# 项目基本 URL
      VITE_BASE_URL = /
      
    • .env.test【测试环境】:

      # 测试环境
      VITE_USER_NODE_ENV = test# 项目基本 URL
      VITE_BASE_URL = /test/
      
  2. 创建src\types\global.d.ts文件声明环境变量类型:

    // 定义泛型 Recordable,键类型为字符串、值类型为 T
    declare type Recordable<T = any> = Record<string, T>// 定义接口 ViteEnv,描述项目的环境变量结构
    declare interface ViteEnv {VITE_USER_NODE_ENV: 'development' | 'production' | 'test' // 当前运行环境,可选值为 'development', 'production' 或 'test'VITE_GLOB_APP_TITLE: string // 应用标题VITE_PORT: number // Vite 端口号VITE_OPEN: boolean // 是否自动在浏览器打开应用VITE_REPORT: boolean // 是否开启 report 功能VITE_BUILD_COMPRESS: 'gzip' | 'brotli' | 'gzip,brotli' | 'none' // 可选值为 'gzip', 'brotli', 'gzip,brotli' 或 'none'VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean // 是否删除原始文件VITE_DROP_CONSOLE: boolean // 是否删除控制台VITE_BASE_URL: string // 基本 URLVITE_API_URL: string // API 地址VITE_PROXY: [string, string][] // 表示代理配置VITE_USE_IMAGEMIN: boolean // 是否使用图像压缩
    }
    
  3. 创建build\getEnv.ts文件用于完成环境变量类型转换:

    /*** 从 Vite 的环境变量对象中读取值并进行类型转换* @param envConf 原始环境变量配置对象* @returns ViteEnv 适用于 Vite 的环境变量对象*/
    export function wrapperEnv(envConf: Recordable): ViteEnv {// 创建一个空对象,用于存储处理后的环境变量const ret: any = {}// 遍历环境变量对象的键for (const envName of Object.keys(envConf)) {// 将环境变量值中的 '\n' 替换为换行符 '\n'let realName = envConf[envName].replace(/\\n/g, '\n')realName = realName === 'true' ? true : realName === 'false' ? false : realNameif (envName === 'VITE_PORT') realName = Number(realName)if (envName === 'VITE_PROXY') {try {realName = JSON.parse(realName)} catch (error) {// ignore}}ret[envName] = realName}return ret
    }
    
  4. tsconfig.json中添加 TypeScript 编译器配置:

    {"include": ["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue","build/**/*.ts","build/**/*.d.ts","vite.config.ts"],"exclude": ["node_modules", "dist", "**/*.js"]
    }
    
  5. vite.config.ts中获取环境变量,并修改 Vite 启动配置:

    import { defineConfig, loadEnv, ConfigEnv, UserConfig } from 'vite'
    import { wrapperEnv } from './build/getEnv'// https://vitejs.dev/config/
    export default defineConfig(({ mode }: ConfigEnv): UserConfig => {const root = process.cwd()// 获取.env文件中的内容const env = loadEnv(mode, root)const viteEnv = wrapperEnv(env)return {root, //项目根目录base: viteEnv.VITE_BASE_URL, //基础 URLserver: {host: '0.0.0.0', //指定服务器主机地址port: viteEnv.VITE_PORT, //指定开发服务器端口strictPort: true, //若端口已被占用则会直接退出open: viteEnv.VITE_OPEN //服务器启动时,自动在浏览器中打开应用程序}}
    })
    
  6. 在项目中使用 Vite 提供的import.meta.env对象获取这些环境变量:

    <script setup lang="ts">
    const title = import.meta.env.VITE_APP_TITLE
    </script><template><h1>{{ title }}</h1>
    </template>
    

安装 Element Plus

  1. 使用包管理器 pnpm 安装 Element Plus:

    pnpm install element-plus
    
  2. main.ts 文件中引入 Element Plus:

    import { createApp } from 'vue'
    import ElementPlus from 'element-plus'
    import 'element-plus/dist/index.css'
    import App from './App.vue'const app = createApp(App)app.use(ElementPlus)
    app.mount('#app')
    
  3. 设置 Element Plus 默认语言为中文:

    import ElementPlus from 'element-plus'
    import zhCn from 'element-plus/es/locale/lang/zh-cn'app.use(ElementPlus, {locale: zhCn,
    })
    
  4. tsconfig.json 中通过 compilerOptions.type 指定全局组件类型:

    {"compilerOptions": {// ..."types": ["element-plus/global"]}
    }
    
  5. App.vue 中添加 Element Plus 按钮组件:

    <template><div class="mb-4"><el-button>Default</el-button><el-button type="primary">Primary</el-button><el-button type="success">Success</el-button><el-button type="info">Info</el-button><el-button type="warning">Warning</el-button><el-button type="danger">Danger</el-button></div>
    </template>
    
  6. 执行命令启动项目:

    pnpm run dev
    

    image-20240609193421586

集成 sass 配置全局变量

  1. 通过以下命令安装 sass

    pnpm add sass
    
  2. 创建src\assets\styles\variable.scss全局变量文件:

    //全局scss变量
    $color:red
    
  3. vite.config.ts中使用 additionalData 引入全局的 Sass 变量文件:

    export default defineConfig({css: {preprocessorOptions: {scss: {javaScriptEnabled: true,// 向全局 scss 文件内容注入变量additionalData: `@import "@/assets/styles/variable.scss";`}}}
    })
    
  4. 在 Vue 组件中使用变量:

    <script setup lang="ts">
    // This starter template is using Vue 3 <script setup> SFCs
    </script><template><div><h1>Hello world!</h1></div>
    </template><style scoped lang="scss">
    /* SCSS */
    div {font: 2em sans-serif;h1 {color: $color;}
    }
    </style>
    
  5. 执行命令启动项目:

    pnpm run dev
    

    image-20240610130819150

清除默认样式

通常,浏览器会对一些 HTML 元素应用一些默认的样式,但这些默认样式在不同浏览器之间可能存在差异,导致页面在不同浏览器中呈现不一致。

清除默认样式可以将所有元素的样式重置为统一的基础样式,然后再根据需要逐个重新定义。这样可以确保在编写样式时,不会受到浏览器默认样式的影响,从而更容易实现跨浏览器的一致性。

  1. 进入 NPM 官网:https://www.npmjs.com/,搜索 reset.scss,复制即可:

    image-20240610125420052

  2. 创建 src\assets\styles\reset.scss 文件,添加样式:

    *,
    *:after,
    *:before {box-sizing: border-box;outline: none;
    }html,
    body,
    div,
    span,
    applet,
    object,
    iframe,
    h1,
    h2,
    h3,
    h4,
    h5,
    h6,
    p,
    blockquote,
    pre,
    a,
    abbr,
    acronym,
    address,
    big,
    cite,
    code,
    del,
    dfn,
    em,
    img,
    ins,
    kbd,
    q,
    s,
    samp,
    small,
    strike,
    strong,
    sub,
    sup,
    tt,
    var,
    b,
    u,
    i,
    center,
    dl,
    dt,
    dd,
    ol,
    ul,
    li,
    fieldset,
    form,
    label,
    legend,
    table,
    caption,
    tbody,
    tfoot,
    thead,
    tr,
    th,
    td,
    article,
    aside,
    canvas,
    details,
    embed,
    figure,
    figcaption,
    footer,
    header,
    hgroup,
    menu,
    nav,
    output,
    ruby,
    section,
    summary,
    time,
    mark,
    audio,
    video {font: inherit;font-size: 100%;margin: 0;padding: 0;vertical-align: baseline;border: 0;
    }article,
    aside,
    details,
    figcaption,
    figure,
    footer,
    header,
    hgroup,
    menu,
    nav,
    section {display: block;
    }body {line-height: 1;
    }ol,
    ul {list-style: none;
    }blockquote,
    q {quotes: none;&:before,&:after {content: '';content: none;}
    }sub,
    sup {font-size: 75%;line-height: 0;position: relative;vertical-align: baseline;
    }sup {top: -.5em;
    }sub {bottom: -.25em;
    }table {border-spacing: 0;border-collapse: collapse;
    }input,
    textarea,
    button {font-family: inhert;font-size: inherit;color: inherit;
    }select {text-indent: .01px;text-overflow: '';border: 0;border-radius: 0;-webkit-appearance: none;-moz-appearance: none;
    }select::-ms-expand {display: none;
    }code,
    pre {font-family: monospace, monospace;font-size: 1em;
    }
    
  3. 创建 src\assets\styles\index.scss 文件,用于统一管理和维护项目的样式文件:

    @import './reset.scss';
    
  4. main.ts 文件中引入index.scss样式文件:

    import './assets/styles/index.scss'
    

安装 Tailwind CSS

  1. 打开 Tailwind CSS 官网【https://tailwindcss.com/】,点击【Docs】查看文档:

    image-20240609113814168

  2. 点击【Framework Guides】查看框架指南,我们的项目是使用 Vite 构建,所以点击【Vite】:

    image-20240609114049866

  3. 点击【Using Vue】查看安装步骤:

    image-20240609115121127

  4. 执行命令安装 Tailwind CSS:

    pnpm i -D tailwindcss postcss autoprefixer
    

    image-20240609115408956

  5. 运行命令生成 Tailwind CSS 配置文件:tailwind.config.js、postcss.config.js

    npx tailwindcss init -p
    

    image-20240609115511670

  6. tailwind.config.js配置文件中添加模板文件路径:

    content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}']
    
  7. 创建src\assets\styles\tailwind.scss文件, 添加 Tailwind CSS 提供的用于导入基础样式、组件和实用工具的特殊指令:

    @tailwind base;
    @tailwind components;
    @tailwind utilities;
    
  8. src\assets\styles\index.scss 文件引入tailwind.scss,或者在main.ts文件中直接引入:

    @import './tailwind.scss';
    
  9. 在项目中使用 Tailwind.css 设置内容样式:

    <template><h1 class="text-3xl font-bold underline">Hello world!</h1>
    </template>
    
  10. 执行命令启动项目:

    pnpm run dev
    

    image-20240609190157155

相关文章:

使用 Vue 官方脚手架初始化 Vue3 项目

Vite 官网&#xff1a;https://cn.vitejs.dev/ Vue 官网&#xff1a;https://vuejs.org/ Vue 官方文档&#xff1a;https://cn.vuejs.org/guide/introduction.html Element Plus 官网&#xff1a;https://element-plus.org/ Tailwind CSS 官网&#xff1a;https://tailwindcss.…...

C语言中的宏定义(#define)和函数调用的区别

C语言中的宏定义&#xff08;#define&#xff09;和函数调用在概念、工作方式以及它们对代码的影响上有显著的区别。以下是它们之间的主要差异&#xff1a; 宏定义&#xff08;#define&#xff09; 工作方式&#xff1a;宏定义是在预处理阶段进行的文本替换。预处理器会在编译…...

196. 删除重复的电子邮箱

196. 删除重复的电子邮箱 题目链接&#xff1a;196. 删除重复的电子邮箱 代码如下&#xff1a; # Write your MySQL query statement below delete from Person as p where p.id not in(select e.id from (select min(id) as idfrom Person group by email ) as e )...

Android 大话binder通信 (上)

戳蓝字“牛晓伟”关注我哦&#xff01; 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 本文摘要 用故事的方式把binder通信的整个过程都描述出来&#xff0c;binder通信都经历了哪些节点&#xff0c;在这些节点上的数据有哪些变化&#xff0c;同时还对binder通…...

DevOps学习回顾01-技能发展路线-岗位能力-体系认知

事为先&#xff0c;人为重–事在人为 参考来源&#xff1a; 极客时间专栏&#xff1a;DevOps实战笔记&#xff0c;作者&#xff1a;石雪峰 课程链接&#xff1a;https://time.geekbang.org/column/intro/235 时代的典型特征 VUCA VUCA 是指易变性&#xff08;Volatility&…...

【MySQL】复合查询和内外连接

文章目录 MySQL复合查询和内外连接1. 复合查询1.1 多表查询1.2 自连接1.3 子查询单行子查询多行子查询多列子查询from中使用子查询合并查询 2. 内外连接1. INNER JOIN2. LEFT JOIN3. RIGHT JOIN4. FULL JOIN5. CROSS JOIN MySQL复合查询和内外连接 1. 复合查询 1.1 多表查询 …...

【星海随笔】云解决方案学习日志篇(二) kafka、Zookeeper、Fielbeat

Elastic 中国社区官方博客 https://blog.csdn.net/ubuntutouch/category_9209092.html Kafka kafka的源代码是基于Scala语言编写的&#xff0c;运行在Java虚拟机&#xff08;即:JVM&#xff09;上。因此&#xff0c;在安装kafka之前需要先安装JDK Kafka 为什么依赖 Zookeepe…...

【测试专题】系统测试报告(原件Word)

软件测试报告在软件开发过程中起着至关重要的作用&#xff0c;主要有以下几个主要原因&#xff1a; 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…...

C++中的模板方法模式

目录 模板方法模式&#xff08;Template Method Pattern&#xff09; 实际应用 数据处理流程 在线教育系统的课程模板 软件开发生命周期 总结 模板方法模式&#xff08;Template Method Pattern&#xff09; 模板方法模式是一种行为设计模式&#xff0c;它定义了一个操作…...

【数据结构】第十七弹---C语言实现选择排序

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、选择排序 1.1、基本思想 1.2、代码实现 1.3、代码测试 1.4、时空复杂度分析 总结 1、选择排序 1.1、基本思想 选择排序是一种简单直观的比…...

信号处理中的梯型权重操作(Tapering)

目录 1. 引言2. 一个Tapering操作的例子3. Tapering操作的简单实现延伸阅读1. 引言 Tapering 操作是对信号数据在水平和垂直方向上应用梯形权重,这个操作可以减弱数据边界效应,从而在进行傅里叶变换时减少伪影和边缘效应。本文将通过一个简单的例子来展示 Tapering 操作的具…...

深入解析分布式链路追踪:原理、技术及应用

目录 分布式链路追踪简介分布式链路追踪的基本概念 Span 和 Trace上下文传播采样策略 分布式链路追踪的工作原理常见的分布式链路追踪系统 ZipkinJaegerOpenTelemetry 分布式链路追踪的技术实现 数据收集数据传输数据存储数据展示 分布式链路追踪的应用场景 性能优化故障排除依…...

2024信息系统、信号处理与通信技术国际会议(ICISPCT2024)

2024信息系统、信号处理与通信技术国际会议&#xff08;ICISPCT2024) 会议简介 2024国际信息系统、信号处理与通信技术大会&#xff08;ICISPCT2024&#xff09;将在青岛隆重开幕。本次会议旨在汇聚全球信息系统、信号处理和通信技术领域的专家学者&#xff0c;共同探索行业…...

用这个神级提示词插件,能让你的AI绘画工具Stable diffusion提示词直接写中文!

大家好&#xff0c;我是设计师阿威 最近&#xff0c;有同学在使用AI绘画工具 Stable Diffusion的时候和我说&#xff1a;老师&#xff0c;我英文不好&#xff0c;能不能直接让我写中文提示词啊&#xff1f;最好可以直接在SD的输入框就能直接写中文&#xff0c;不用切换网页或者…...

Android里的设计模式

一&#xff1a;设计模式分类 经典的23种设计模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides&#xff08;合称“Gang of Four”&#xff09;在他们的书《设计模式&#xff1a;可复用面向对象软件的基础》中定义的。以下是这些设计模式的分类和简要介绍。 1.…...

token无感刷新

Token无感刷新通常指的是在用户不知情的情况下自动刷新认证Token&#xff0c;以保持用户的会话状态。这通常在使用JWT&#xff08;JSON Web Tokens&#xff09;作为认证方式时使用。以下是实现无感刷新的一种常见方法&#xff1a; 1. 前端请求拦截&#xff1a; 在发送请求前&a…...

Golang的协程调度器GMP

目录 GMP 含义 设计策略 全局队列 P的本地队列 GMP模型以及场景过程 场景一 场景2 场景三 场景四 场景五 场景六 GMP 含义 协程调度器&#xff0c;它包含了运行协程的资源&#xff0c;如果线程想运行协程&#xff0c;必须先获取P&#xff0c;P中还包含了可运行的G…...

C++ 后端,Vue前端

参考2篇博客 1-VUE、C前后端调用 2-Vue解决CORS header ‘Access-Control-Allow-Origin’ missing及同源、跨域问题 这里给出App.vue代码 <script setup lang"ts"> import HelloWorld from ./components/HelloWorld.vueimport axios from axios import { ref…...

使用Navicat Premium向mysql插入2000000条数据

DELIMITER // DROP PROCEDURE IF EXISTS sys_log; CREATE PROCEDURE sys_log() BEGIN DECLARE n int DEFAULT 1; WHILE(n<2000000) DO INSERT INTO sys_log VALUES (n, 超级系统管理员, 查询实时工况数据, /keyParameterMonitoring/getNewestUnitData, {\"role\"…...

docker命令记录

基本命令和参数 docker run: 运行一个新的容器实例。-itd: 组合参数&#xff0c;含义如下&#xff1a; -i: 以交互模式运行容器&#xff0c;保持标准输入打开。-t: 分配一个伪终端。-d: 后台运行容器&#xff0c;即使容器启动后依然返回控制台。 设备映射 --device/dev/dri…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...