vue3+ts+pinia+vant-项目搭建
1.pnpm介绍
npm
和pnpm
都是JavaScript
的包管理工具,用于自动化安装、配置、更新和卸载npm
包依赖。
pnpm
节省了大量的磁盘空间并提高了安装速度:使用一个内容寻址的文件存储方式,如果多个项目使用相同的包版本,pnpm会存储单个副本,并在每个项目中创建硬链接。pnpm
安全性高:在安装包时采用了严格的依赖解析策略。默认情况下,它不会扁平化依赖,这意味着子依赖不会被提升到项目的顶层node_modules
目录,这减少了意外覆盖依赖的风险。pnpm
兼容性不如npm
安装:npm i pnpm -g
2.基础创建
2.1 创建项目
创建vue3
项目:pnpm create vue@latest
2.2 目录调整及介绍
./src├── assets `静态资源,图片...`├── components `通用组件`├── router `路由`│ └── index.ts├── api `接口服务API`├── stores `状态仓库`├── styles `样式`│ └── main.scss├── types `TS类型`├── utils `工具函数`├── views `页面`├── main.ts `入口文件`└──App.vue `根组件`
2.3 env.d.ts
可以看到main.ts
文件中引入文件报找不到错误,调整env.d.ts
配置
// 声明文件
// 用于引入 Vite 提供的类型声明,使 TypeScript 了解 ImportMeta 和 ImportMetaEnv 的类型
/// <reference types="vite/client" />
declare module '*.vue' {import type { DefineComponent } from 'vue'const component: DefineComponent<{}, {}, any>export default component
}
2.4 tsconfig.json
vite
默认只会校验不会解析ts文件,所以需要安装typescript
和vue-tsc
用于辅助解析,项目初始化时已经安装好了,配置tsconfig.json
文件
{"compilerOptions": {"target": "ESNext", // 目标转化的语法"useDefineForClassFields": true,"module": "ESNext", // 转化的格式"moduleResolution": "Node", //解析规则"strict": true, //严格模式"sourceMap": true, // 启动sourceMap调试"jsx": "preserve", // 不允许ts编译jsx语法"resolveJsonModule": true,"isolatedModules": true,"esModuleInterop": true, //es6和commonjs转化"lib": ["ESNext","DOM"],"skipLibCheck": true,"noEmit": true,"baseUrl": ".","paths": {"@/*": ["src/*"],"components": ["src/components/*"],"_pinia/*": ["src/pinia/*"]},},"include": ["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue","types"],
}
2.5 eslint配置
2.5.1 安装额外依赖
pnpm install @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest -D
2.5.2 配置.eslintrc.cjs
文件
module.exports = {env: { //环境 针对环境的语法browser: true,es2021: true,node: true},// 集成了哪些规则 别人写好的extends: ['eslint:recommended', 'plugin:vue/vue3-essential', 'plugin:@typescript-eslint/recommended'],overrides: [],// 'parser': '@typescript-eslint/parser',// 可以解析.vue 文件parser: 'vue-eslint-parser',parserOptions: {ecmaVersion: 'latest',sourceType: 'module',parser: '@typescript-eslint/parser' // 解析ts文件},plugins: ['vue', '@typescript-eslint', 'prettier'],// 自定义的规则rules: {'vue/multi-word-component-names': 'off','no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off','arrow-spacing': [2,{//强制箭头函数前后都使用空格before: true,after: true}],'prettier/prettier': 'off',"@typescript-eslint/no-explicit-any": ["off"], // 关闭不能定义any类型的校验'no-irregular-whitespace': 2, // 不能有不规则的空格'comma-dangle': [2, 'never'] // 对象字面量项尾不能有逗号}
}
2.5.3 配置.eslintignore
文件
.DS_Store
node_modules
/dist# local env files
.env.local
.env.*.local# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
2.5.4 校验命令
可以通过执行npm run lint
去校验指定后缀规则的文件,整体修复文件中的代码问题
2.6 prettier配置
2.6.1 创建.eslintrc.cjs
module.exports = {printWidth: 200, //一行内容的宽度,默认80singleQuote: true, //使用双引号semi: false, // 末尾添加分号tabWidth: 2,trailingComma: 'none',useTabs: false,endOfLine: 'auto'
}
2.6.2 取消勾选
2.6.3 勾选保存
2.7 配置代码检查工作流-husky
提交代码前做代码检查 ,使用husky这个git hooks工具
- 安装:
pnpm install husky -D
- 配置
package.json
执行命令:"prepare": "husky install"
- 修改文件 做提交前代码校验
npx husky add .husky/pre-commit "pmpm lint"
2.8 commitlint
用于提交commit
信息规范
- 安装:
pnpm add @commitlint/config-conventional @commitlint/cli -D
- 执行:
npx husky add .husky/commit-msg
- 修改生成文件内容:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"npx --no-install commitlint --edit $1
- 创建
.commitlintrc.cjs
文件
module.exports={extends:['@commitlint/config-conventional'],rules:{}}
3.Vant
官网
- 安装:
pnpm add vant
- 插件
在基于vite
、webpack
或vue-cli
的项目中使用Vant
时,可以使用unplugin-vue-components
插件,它可以自动引入组件。
Vant
官方基于unplugin-vue-components
提供了自动导入样式的解析器@vant/auto-import-resolver
,两者可以配合使用。
pnpm add @vant/auto-import-resolver unplugin-vue-components -D
- 使用
import 'vant/lib/index.css'
import vant from 'vant'
app.use(vant)
- 个别组件
Vant
中有个别组件是以函数的形式提供的,包括Toast、Dialog、Notify 、ImagePreview
组件。在使用函数组件时,unplugin-vue-components
无法解析自动注册组件,导致@vant/auto-import-resolver
无法解析样式,因此需要手动引入样式。
// Toast
import { showToast } from 'vant';
import 'vant/es/toast/style';// Dialog
import { showDialog } from 'vant';
import 'vant/es/dialog/style';// Notify
import { showNotify } from 'vant';
import 'vant/es/notify/style';// ImagePreview
import { showImagePreview } from 'vant';
import 'vant/es/image-preview/style';
4.移动端适配
安装:pnpm add -D postcss-px-to-viewport
配置: postcss.config.js
// eslint-disable-next-line no-undef
module.exports = {plugins: {'postcss-px-to-viewport': {// 设备宽度375计算vw的值viewportWidth: 375,},},
};
5.unplugin-auto-import 自动引入
实现依赖的自动导入,不用再频繁导入依赖包,unplugin-auto-import
是基于 unplugin
写的,支持 Vite、Webpack、Rollup、esbuild
多个打包工具。
比如代码中:import { computed, ref } from 'vue'
- 安装
pnpm install -D unplugin-auto-import
- 配置
// vite.config.js
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({plugins: [vue(),AutoImport({imports: ['vue', 'vue-router']// eslintrc: { enabled: true }})],...})
- 问题
此时文件中的依赖已经被引入,但是会有错误提示
通过配置会自动生成两个文件.eslintrc-auto-import.json
和auto-imports.d.ts
在.eslintrc.cjs
和tsconfig.json
分别引入,可以解决。
相关文章:
vue3+ts+pinia+vant-项目搭建
1.pnpm介绍 npm和pnpm都是JavaScript的包管理工具,用于自动化安装、配置、更新和卸载npm包依赖。 pnpm节省了大量的磁盘空间并提高了安装速度:使用一个内容寻址的文件存储方式,如果多个项目使用相同的包版本,pnpm会存储单个副本…...
自动化测试概念篇
目录 一、自动化 1.1 自动化概念 1.2 自动化分类 1.3 自动化测试金字塔 二、web自动化测试 2.1 驱动 2.2 安装驱动管理 三、selenium 3.1 ⼀个简单的web自动化示例 3.2 selenium驱动浏览器的工作原理 一、自动化 1.1 自动化概念 在生活中: 自动洒水机&am…...
Mojo值的生命周期(Life of a value)详解
到目前为止,我们已经解释了 Mojo 如何允许您使用 Mojo 的所有权模型构建内存安全的高性能代码而无需手动管理内存。但是,Mojo 是为 系统编程而设计的,这通常需要对自定义数据类型进行手动内存管理。因此,Mojo 允许您根据需要执行此操作。需要明确的是,Mojo 没有引用计数器…...
java对接kimi详细说明,附完整项目
需求: 使用java封装kimi接口为http接口,并把调用kimi时的传参和返回数据,保存到mysql数据库中 自己记录一下,以做备忘。 具体步骤如下: 1.申请apiKey 访问:Moonshot AI - 开放平台使用手机号手机号验证…...
鸿蒙媒体开发【基于AVCodec能力的视频编解码】音频和视频
基于AVCodec能力的视频编解码 介绍 本实例基于AVCodec能力,提供基于视频编解码的视频播放和录制的功能。 视频播放的主要流程是将视频文件通过解封装->解码->送显/播放。视频录制的主要流程是相机采集->编码->封装成mp4文件。 播放支持的原子能力规…...
django集成pytest进行自动化单元测试实战
文章目录 一、引入pytest相关的包二、配置pytest1、将django的配置区分测试环境、开发环境和生产环境2、配置pytest 三、编写测试用例1、业务测试2、接口测试 四、进行测试 在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率,相比于Django自带的测试…...
48天笔试训练错题——day40
目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 发邮件 2. 最长上升子序列 选择题 1. DNS 劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回…...
LabVIEW在DCS中的优势
DCS(Distributed Control System,分布式控制系统)是一种用于工业过程控制的自动化系统。它将控制任务分散到多个控制单元中,通过网络连接和协调这些单元来实现对整个过程的监控和控制。DCS通常用于大型工业设施,如化工…...
英特尔:从硅谷创业到全球科技巨头
在科技行业,英特尔不仅是一个品牌,更是一种精神的象征。自1968年成立以来,英特尔经历了从初创企业到全球半导体产业领导者的华丽转变,其发展历程是科技创新与市场战略完美结合的典范。本文将深入探讨英特尔的发展历程,…...
生物计算与纳米技术:交汇前沿的科学领域
在当今科技迅猛发展的时代,生物计算和纳米技术作为前沿科技领域的两个重要方向,正在逐渐融合并带来深远的影响。生物计算涉及使用生物系统进行计算和数据存储,而纳米技术则关注制造极小尺度的电子器件和材料科学。本文将深入探讨这两个领域的…...
C#中栈和队列
在C#中,Stack和Queue是两种不同的集合类型,它们用于实现后进先出(LIFO)和先进先出(FIFO)的数据结构。 Stack(堆栈) Stack是一个后进先出的集合,这意味着最后一个添加到堆…...
技战法丨攻防演练防御——纵深、联动、诱捕(可搬运、可cv)
演习活动经过近几年的发展,攻击方的专业水平已大幅提高,逐渐呈现出隐秘化、APT化的趋势。其利用渗透技术对目标系统做深入探测,不断挖掘防守方网络系统的薄弱环节,这就要求防守方构建立体式纵深防护体系来抵御入侵。同时ÿ…...
1、 window平台opencv下载编译, 基于cmake和QT工具链
1. 环境准备,源码下载 1.1 前置环境 qt 下载安装cmake 安装,可参考: https://blog.csdn.net/qq_51355375/article/details/139186681 1.2 opencv 源码下载 官网地址: https://opencv.org/releases/ 下载源码: 2 …...
C++20三向比较运算符详解
三向比较运算符可以用于确定两个值的大小顺序,也被称为太空飞船操作符。使用单个表达式,它可以告诉一个值是否等于,小于或大于另一个值。 它返回的是类枚举(enumeration-like)类型,定义在 <compare> …...
监听机制与耗电量
一、监听机制与耗电量的关系 监听机制通常涉及对特定事件、状态或数据的持续监测。在移动设备和嵌入式系统中,这种监听可能由多种组件和传感器实现,如GPS、传感器(如加速度计、陀螺仪)、网络连接等。监听的频率越高,意…...
C++ //练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。
C Primer(第5版) 练习 16.29 练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 template <typename> class BlobP…...
【Mode Management】CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗
目录 前言 正文 1.CanNm从RSS状态切换到PBS状态行为分析 1.1.CanNm动作 1.2.ComM动作 1.3.DCM动作 1.4 小结 2.CanNM在PBS状态下收到一帧诊断报文行为分析 2.1.DCM动作1 2.2. ComM动作 2.3. DCM动作2 2.3. CanNm动作 2.4 问题 2.5 分析 3.总结 前言 我们知道EC…...
【C++】模版:范式编程、函数模板、类模板
目录 一.范式编程 二.函数模板 1.概念与格式 2.原理 3.实例化 4.匹配规则 三.类模板 一.范式编程 在写C函数重载的时候,可能会写很多同一类的函数,例如交换函数: void Swap(int& left, int& right) {int temp left;left r…...
验证图片旋转
最近在使用百度图片翻译时遇到一个问题,就是图片会翻转90,经与百度沟通,发现是原始图片中有个旋转参数引起的。 于是写个demo验证一下。 // 获取元数据中的旋转方向 func getOrientation() int {//打开图像文件f, err : os.Open("image…...
宏景eHR /ajax/ajaxService SQL注入漏洞复现
0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR /ajax/ajaxService 接口处存在SQL注入漏洞,,未经身份验证的远程攻击者通过利用SQL注入漏洞配合数据库xp_cmdshell可…...
从源码看 Redis:深入理解 redisDb 和 redisObject
Redis 是一个广泛使用的内存数据库,以其高性能和丰富的数据结构而闻名。不同于磁盘数据库,磁盘数据库将数据读取到文件中维护,而内存数据库将数据存储在内存中,意味着其想要维护数据,必须在代码中维护一个保存数据的结…...
unity中实现流光效果——世界空间下
Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…...
项目经验分享:用4G路由器CPE接海康NVR采用国标GB28181协议TCP被动取流一段时间后设备就掉线了
最近我们在做一个生态化养殖的项目时,发现一个奇怪的现象: 项目现场由于没有有线网络,所以,我们在现场IPC接入到海康NVR之后,再通过一款4G的CPE接入到天翼云的国标GB28181视频平台;我们采用UDP协议播放NVR…...
【RabbitMQ】RabbitMQ不公平分发_预取值
一、不公平分发 1、简介 RabbitMQ中的不公平分发(Unfair Dispatch)是指当多个消费者(Consumers)同时订阅同一个队列(Queue)时,消息的分发机制并非严格平均或公平,而是基于某些条件…...
最新AI模型使用指南和模型
市面上最好的AI大模型 OpenAI GPT-4: 概述:GPT-4 是 OpenAI 发布的最新一代大型语言模型,具备更强的理解和生成自然语言的能力。特点: 强大的文本生成和理解能力。支持多语言处理。可用于各种应用场景,如对话生成、内容…...
数据结构之八大基本排序方法
在数据结构中,排序是一个重要的操作,它有助于提高数据的可读性和可操作性。排序算法有多种,各有优缺点,适用于不同的场景。以下是八大经典排序算法的介绍: 1. 冒泡排序(Bubble Sort) 原理&…...
《Milvus Cloud向量数据库指南》——什么是高可用:深入理解数据库系统中的高可用性架构
什么是高可用:深入理解数据库系统中的高可用性架构 在信息技术日新月异的今天,高可用性(High Availability,简称HA)已成为衡量一个系统,尤其是数据库系统稳定性和可靠性的重要标准。高可用性的核心目标在于确保系统能够持续不断地提供服务,最大限度地减少因维护活动、硬…...
C++ | Leetcode C++题解之第319题灯泡开关
题目: 题解: class Solution { public:int bulbSwitch(int n) {return sqrt(n 0.5);} };...
C# 使用 NLog 输出日志到文件夹
在项目中使用 NuGet 安装 NLog 包以及 NLog.Config 包 配置 nlog.config 在项目的根目录下创建一个 Nlog.config 文件(如果还没有),然后添加如下配置: <?xml version"1.0" encoding"utf-8" ?> <…...
node.js使用NodeMachineID 生成唯一UUID和注意事项
node-machine-id用于获取或生成唯一的机器ID 如何使用 const { machineId, machineIdSync } require(node-machine-id) JSON.stringify(machineIdSync({original: true})) ;方法: machineIdSync 此函数同步获取操作系统本机UUID/GUID,默认情况下进行哈…...
建立自己的影视网站/长尾关键词是什么意思
Vim--“神一样的编译器” Vim编译器被誉为“神一样的编译器”,为什么有这样的美誉,那就是因为它能让你的双手全神贯注的在键盘上进行编程,而不是在键盘和鼠标来回切换,这样的好处是能提高你的开发效率,让你的工作更加专…...
怎样做网商网站/网站收录情况查询
以竖屏方式打开新文件:(只输入vs,会默认再次垂直打开当前文件) :vs new.txt以横屏方式打开新文件:(只输入sp,会默认再次水平打开当前文件):sp new.txt【Ctrl】 【w】 【-】减小高度【Ctrl】 【w】 【】增加高度【Ctrl】 【w】 【<】向左/右移动…...
网站是做百度快照推广好/网站关键词排名批量查询
1. 安装 这里以安装hadoop-0.20.2为例 先安装java,参考这个 去着下载hadoop 解压 tar -xzf hadoop-0.20.22. 配置 修改环境变量 vim ~/.bashrc export HADOOP_HOME/home/rte/hadoop-0.20.2 #这里为实际hadoop解压的目录位置 export PATH$PATH:$HADOOP_HOME/bin source ~/.bas…...
建设自己网站教程/西安关键词seo公司
为了方便,一般在本地的测试环境中我都使用了 XAMPP 或者 LAMPP 。(Apache Friends XAMPP)但是默认的XAMPP中没有提供xhprof的支持,为此需要自己独立编译。下面记录了编译的过程。1、如果你的XAMPP没有 DEVEL包,那么编译…...
邯郸百度公司咋样/惠州市seo广告优化营销工具
最近研究mysql源码,各种锁,各种互斥,好在我去年认真学了《unix环境高级编程》, 虽然已经忘得差不多了,但是学过始终是学过,拿起来也快。写这篇文章的目的就是总结linux 下多线程编程,作为日后的…...
wordpress获取分类名称/打开免费百度啊
前言 当 connection 对象构建初始化完成后,我们就可以利用 DB 来进行数据库的 CRUD ( Create、Retrieve、Update、Delete) 操作。本篇文章,我们将会讲述 laravel 如何与 pdo 交互,实现基本数据库服务的原理。 run laravel 中任何数据库的操…...