搭建vue3+vant项目架构
git代码仓库,直接下载压缩包使用
1、首先要安装node.js(18.3 或更高版本)
2、创建vue3项目
npm create vue@latest
然后按照自己的需要进行选择就行

到此vue3项目创建完成,接下来是搭建项目架构
3、配置Vant (移动端ui)
vue3项目引入vant,按需引入组件
// 引入vant
npm i vant
// 辅助按需引入样式
npm i @vant/auto-import-resolver unplugin-vue-components unplugin-auto-import -D
在文件vite.config.js,添加以下代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from '@vant/auto-import-resolver'export default defineConfig({plugins: [vue(),AutoImport({resolvers: [VantResolver()],}),Components({resolvers: [VantResolver()],}),]
})
使用
vue3中直接在使用的组件,按需引入需要用的组件就行,例如:
// test.vue
<template><van-button type="primary">按钮</van-button>
</template>
4、配置环境变量
配置各个环境的配置文件

// 例如在.env.development文件中NODE_EVN=development // 环境变量
VITE_BASE_API=http://dev.os-api.vertlet.com // 请求的地址
// package.json 文件"scripts": {"dev": "vite --open --mode development","test2": "vite --open --mode test","gray": "vite --open --mode gray","production": "vite --open --mode production","build:gray": "vite build --mode gray","build:dev": "vite build --mode development","build:test2": "vite build --mode test","build:prod": "vite build","preview": "vite preview"},
5、配置axios请求
// 创建request.ts 文件,封装axios
import axios from 'axios'
import { showToast } from 'vant'const instance = axios.create({baseURL: import.meta.env.VITE_BASE_API,timeout: 30000,headers: {'X-Requested-With': 'XMLHttpRequest',},
})// 请求拦截
instance.interceptors.request.use(function (config) {const token = localStorage.getItem('token')// 在发送请求之前做些什么if (token) {config.headers['Xl-Os-Token'] = token}if (config.method == 'get') {config.params.from_mobile = 1} else {config.data.from_mobile = 1}return config},function (error) {// 对请求错误做些什么return Promise.reject(error)},
)// 响应拦截
instance.interceptors.response.use((response) => {const { data } = responseif (data.code === 0) {// 请求成功return data}showToast(data.msg)},function (err) {console.log(err)return Promise.reject(err)},
)export function GET(url: string, params: object, config?: object) {return instance({method: 'get',url,params,...config,})
}export function POST(url: string, data: object, config?: object) {return instance({method: 'post',url,data,...config,})
}
6、pinia使用
定义store
// store/counter.tsimport { ref, computed } from 'vue'
import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', () => {const count = ref(0)const doubleCount = computed(() => count.value * 2)function increment() {count.value++}return { count, doubleCount, increment }
})
使用store
在需要的vue组件中,引入store
// views/index.vue<template><p>count:{{ count }}</p><p>doubleCount:{{ doubleCount }}</p><van-button type="primary" @click="increment">anniu</van-button>
</template><script setup lang="ts">
// import { getShopGroupList } from '@/service/index'
import { useCounterStore } from '@/stores/counter'
import { storeToRefs } from 'pinia'const store = useCounterStore()
const { count, doubleCount } = storeToRefs(store)
const { increment } = store
</script>
<style lang="scss" scoped></style>
移动端设配问题
使用amfe-flexable,postcss-pxtorem,进行移动端适配;
amfe-flexable: 是阿里发布的一套可伸缩适配方案。它能根据设备的宽高来设置页面body元素的字体大小,将1rem设置为设备宽度/10以及在页面大小转换时可以重新计算这些数值,但仅限于
<style></style>标签里设置的px,对于行内样式和百分比是不生效的。
postcss-pxtorem是postcss的一个插件,可以将对应的像素单位转换为rem。在vite中可以直接对其进行配置,因为vite已经集成了postcss。
其中最重要的配置属性为:
- rootValue:根元素的值,即1rem对应的像素值大小。一般设置为设计稿尺寸/10
以及一些其他属性:- propList:需要进行转换的css属性的值,可以使用通配符。如:*意思是将全部属性单位都进行转换;[“position”]会匹配到background-position-y
- selectorBlackList:不进行单位转换的选择器。如设置为字符串body,则所有含有body字符串的选择器都不会被该插件进行转换;若设置为[/^body$/],则body会被匹配到而不是.body
- exclude:不需要进行单位转换的文件 mediaQuery:是否允许像素在媒体查询中进行转换
//npm方式
npm install postcss-pxtorem --save-dev
npm install amfe-flexible --save-dev//pnpm方式
pnpm add postcss-pxtorem -D
pnpm add amfe-flexible -D
如果项目用的是ts,还需要安装
npm i --save-dev @types/postcss-pxtorem
由于amfe-flexible没有提供类型信息文件,所以需要自己定义一个.d.ts文件;
使用declare关键字来告诉TypeScript编译器存在一个名为amfe-flexible的模块,但是不提供具体的类型信息
// amfe-flexible.d.tsdeclare module 'amfe-flexible'
// tsconfig.app.json
{"extends": "@vue/tsconfig/tsconfig.dom.json","include": ["env.d.ts","src/**/*","./auto-imports.d.ts","./components.d.ts","./amfe-flexible.d.ts"],"exclude": ["src/**/__tests__/*"],"compilerOptions": {"composite": true,"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo","allowJs": true,"baseUrl": "./","paths": {"@/*": ["src/*"]}}
}
// main.jsimport 'amfe-flexible'
// vite.config.js 配置postcss-pxtoremimport { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import postCssPxToRem from 'postcss-pxtorem'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}},css:{postcss:{plugins:[postCssPxToRem({rootValue:37.5,propList:['*'],})]}}
})
引入scss
npm i sass -D
// vite.config.tsexport default defineConfig({plugins: [// ...css: {preprocessorOptions: {scss: {// 配置全局sass变量注入additionalData: '@use "@/styles/variable.scss";',},},},
})
添加调试面板VConsole
vConsole是一个轻量、可拓展、针对手机网页的前端开发者调试面板
npm install vconsole
// main.jsimport VConsole from 'vconsole';if (import.meta.env.MODE !== "production") {
// 生产环境不展示new VConsole();
}
遇到问题
BUG:在vue文件中导入ts,会出现标红报错:Cannot find module ‘@/service/index’ or
its corresponding type declarations.Vetur(2307)
解决:在使用vue2的时候,用的插件是vetur;但是vue3推荐使用的是vue-offical。只要切换一下插件就没问题了。
BUG:配置vant后,由于插件能帮我们自动引入,因此无需手动引入组件,导致ts识别为“Cannot find name
‘showToast’”,如图:
解决:需要把生成的auto-imports.d.ts和components.d.ts引入tsconfig中,如图

相关文章:
搭建vue3+vant项目架构
git代码仓库,直接下载压缩包使用 1、首先要安装node.js(18.3 或更高版本) 2、创建vue3项目 npm create vuelatest然后按照自己的需要进行选择就行 到此vue3项目创建完成,接下来是搭建项目架构 3、配置Vant (移动端ui) vue3项目引入vant,…...
【Linux】进程间通信 -> 匿名管道命名管道
进程间通信的目的 数据传输:一个进程许需要将它的数据发送给另外一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件(如进程终止时要通知父进程…...
大数据开发学习路线
编程语言: Python:数据分析、数据预处理 Java:Hadoop和许多大数据工具的基础 Scala:用于Apache Spark数据库知识: SQL和NoSQL数据库的基本概念 数据库系统如MySQL、MongoDB等操作系统: Linux基础命令和脚本…...
华为云计算HCIE笔记05
第七章:其它模式 灾备组网 高可用性组网,单核心场景下,直接在两个站点中设置一个第三方仲裁站点,两个站点同时连接到仲裁,并且连接到对方。一旦出现问题,则由仲裁站点进行判断,进行业务切换 双核…...
wordpress网站用token登入开发过程
生成跳转token 示例: function generate_login_token($user_id, $secret_key) {$payload [user_id > $user_id,timestamp > time(),];$payload_json json_encode($payload);$signature hash_hmac(sha256, $payload_json, $secret_key);return base64_en…...
Python基础知识回顾
数据类型 Python可以区分整数(integers、下文简写为int)、浮点数(float)、字符串(string)和布尔值(Boolean)等数据类型。 1)int是可正可负的整数 2)float包…...
C++--------效率和表示
C 效率和表示 效率 时间效率:在 C 中,不同的数据结构和算法有着各异的时间复杂度。例如,访问数组元素的时间复杂度是 O ( 1 ) O(1) O(1),而遍历链表查找元素的时间复杂度最坏情况下是 O ( n ) O(n) O(n)。选择合适的算法与数据…...
在 Ubuntu 服务器上添加和删除用户
在 Ubuntu 服务器上添加和删除用户通常使用命令行工具,如 adduser、useradd、deluser 等。以下是详细的步骤和说明: 添加用户 使用 adduser 命令 adduser 是一个更为友好的脚本,用于创建新用户并设置相关信息。 添加新用户 sudo adduser 用…...
安卓 SystemServer 启动流程
目录 引言 Android系统服务启动顺序 zygote fork SystemServer 进程 SystemServer启动流程 1、SystemServer.main() 2、SystemServer.run() 3、初始化系统上下文 4、创建系统服务管理 5、启动系统各种服务 总结 引言 开机启动时 PowerManagerService 调用 AudioSer…...
深度分析 es multi_match 中most_fields、best_fields、cross_fields区别
文章目录 1. multi_match 查询的类型1.1 best_fields(默认)1.2 most_fields1.3 cross_fields 2. 不同类型的示例查询示例数据: 3. 示例 1: 使用 best_fields查询:说明: 4. 示例 2: 使用 most_fields查询:说…...
中职计算机网络技术理实一体化实训室建设方案
构建理实一体化教学模式对于改善中等职业学校计算机网络技术课程的教学现状、提升教学质量和效率具有重要意义。在中职教育不断深化改革的背景下,积极推进理实一体化教学模式的发展,不仅能够提高计算机网络技术课程的教学水平,满足教育改革的…...
Java技术专家视角解读:SQL优化与批处理在大数据处理中的应用及原理
引言 在大厂架构中,提升系统性能和稳定性是技术团队的首要任务。SQL优化与批处理作为两大关键技术手段,对于处理大规模数据和高并发请求具有重要意义。本文将从Java技术专家的视角出发,深入探讨SQL优化与批处理在大数据处理中的应用及原理&a…...
数据结构(Java版)第六期:LinkedList与链表(一)
目录 一、链表 1.1. 链表的概念及结构 1.2. 链表的实现 专栏:数据结构(Java版) 个人主页:手握风云 一、链表 1.1. 链表的概念及结构 链表是⼀种物理存储结构上⾮连续存储结构,数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的。与火车…...
云边端一体化架构
云边端一体化架构是一种将云计算、边缘计算和终端设备相结合的分布式计算模型。该架构旨在通过优化资源分配和数据处理流程,提供更高效、更低延迟的服务体验。 下面是对这个架构的简要说明: 01云计算(Cloud Computing) — 作为中心…...
人工智能之基于阿里云进行人脸特征检测部署
人工智能之基于阿里云进行人脸特征检测部署 需求描述 基于阿里云搭建真人人脸68个关键点检测模型,模型名称:Damo_XR_Lab/cv_human_68-facial-landmark-detection使用上述模型进行人脸关键点识别,模型地址 业务实现 阿里云配置 阿里云配置…...
基于高云GW5AT-15 FPGA的SLVS-EC桥MIPI设计方案分享
作者:Hello,Panda 一、设计需求 设计一个4Lanes SLVS-EC桥接到2组4lanes MIPI DPHY接口的电路模块: (1)CMOS芯片:IMX537-AAMJ-C,输出4lanes SLVS-EC 4.752Gbps Lane速率; (2&…...
MPLS小实验:利用LDP动态建立LSP
正文共:1234 字 19 图,预估阅读时间:2 分钟 通过上个实验(MPLS小实验:静态建立LSP),我们了解到静态LSP不依靠标签分发协议,而是在报文经过的每一跳设备上(包括Ingress、T…...
C++ 面向对象编程
面向对象编程(Object-Oriented Programming, OOP)是C语言的一个重要特性,它允许开发者以更直观和模块化的方式来设计和构建程序。OOP的四个主要原则是:封装(Encapsulation)、继承(Inheritance&a…...
我的Serverless实战——引领云计算的下一个十年,附答案
(Serverless模式下,按照实际消耗资源及使用存储进行计费) 4.更少的代码,更快的交付速度。 (Serverless提供成熟的代码构建发布、版本切换等特性,交付速度更快) Serverless由开发者实现的服务端逻…...
有哪些其他方法可以实现数据一致性验证?
数据库约束 主键约束: 主键是表中用于唯一标识每条记录的一列或一组列。例如,在一个“用户表”中,用户ID可以作为主键。当插入或更新数据时,数据库会自动检查主键值是否唯一。如果试图插入一个已存在主键值的记录,数据…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

