Vant4在Vue3.3中如何按需导入组件和样式

news2024/11/30 0:35:06

前言

最近我在Vue 3.3的项目中对Vant4做按需导入时,尽管按照Vant4的官方指南进行操作,但样式仍然无法正确加载。经过深入研究和多篇文章的比较,我终于找到了在Vue3中如何正确的按需导入Vant 4组件和样式的方法。由于Vue3.3和Vant4相对较新,相关资料可能还不够完善,因此我认为分享这个经验非常重要。希望这篇文章能帮助到同样遇到此问题的开发者们,并推动相关技术的进步。

我的环境

依赖名称版本
pnpm8.14.0
Node16.20.1
Vue33.3.11
Vite5.0.8

目录

一、安装
二、配置 vite.config.ts
1、按需导入组件
2、按需导入UI组件样式
3、完整代码
三、解决 Vant 375 设计尺寸问题
四、这个unplugin-vue-components跟以往的按需导入有何区别?

一、安装

1、vant

pnpm add vant  // 默认为vant4
// 或 npm i vant  
//    yarn add vant

2、自动按需导入UI库样式的插件

pnpm add vite-plugin-style-import@2.0.0
// 或 npm i vite-plugin-style-import@2.0.0
//    yarn add vite-plugin-style-import@2.0.0

3、自动导入组件插件

pnpm add unplugin-vue-components/vite@0.26.0
// 或 npm i unplugin-vue-components/vite@0.26.0
//    yarn add unplugin-vue-components/vite@0.26.0

二、配置 vite.config.ts

vite.config.ts

1、按需导入组件的插件 unplugin-vue-components

作用:全局自动注册项目中的公共组件或UI组件,组件中需要使用到的公共组件或UI组件无需import手动导入,直接使用即可。然后它会在根目录自动生成components.d.ts,里面保存了我们使用了哪些组件。
注意:仅限.vue后缀的文件。如果是.ts或.js结尾的仍需在顶部import导入。

import Components from 'unplugin-vue-components/vite' 
import { VantResolver } from 'unplugin-vue-components/resolvers'  // 取出vant组件按需导入方法

export default defineConfig({
	plugins: [
		Components({
			dts: true, // 允许项目根目录下的components.d.ts执行
			resolvers: [VantResolver()], // 自动按需导入UI组件
		}),
	]
})

例如:我用了van-button,它会自动将van-button这个组件帮我们注册到components.d.ts中。

home.vue

<template>
	<van-button>按钮</van-button>
</template>

components.d.ts 代码如下:

/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
export {}

declare module 'vue' {
  export interface GlobalComponents {
    VanButton: typeof import('vant/es')['Button']
  }
}

既然它帮我们把用到的组件保存在这里,就需要为它配置路径。

打开tsconfig.json,加入指定路径

 "include": [
		"./components.d.ts",
	]

2、自动按需导入UI样式的插件 vite-plugin-style-import

现在页面可以使用vant组件了,但是没有UI自带的样式,所以需要再配置UI库的样式路径。

import { createStyleImportPlugin } from 'vite-plugin-style-import'
export default defineConfig({
	plugins: [
		createStyleImportPlugin({
			resolves: [
				{
					libraryName: 'vant',
					libraryNameChangeCase: 'pascalCase',
					resolveStyle: name => {
						return `vant/es/${name.toLowerCase()}/index.css`
					},
				},
			],
		}),	
	]
}

说明:vant/es指定的路径是node_modules中的vant依赖包下的路径
在这里插入图片描述

3、完整代码

import Components from 'unplugin-vue-components/vite'  // 自动按需导入组件
import { VantResolver } from 'unplugin-vue-components/resolvers'  // 取出vant的按需导入组件
import { createStyleImportPlugin } from 'vite-plugin-style-import' // 用于配置自动按需导入vant组件库的样式

export default defineConfig({
	plugins: [
	    // 自动按需导入样式
		createStyleImportPlugin({
				resolves: [
					{
						libraryName: 'vant',
						libraryNameChangeCase: 'pascalCase',
						resolveStyle: name => {
							return `vant/es/${name.toLowerCase()}/index.css`
						},
					},
				],
			}),	
		 // 自动按需导入组件
		  Components({
			dts: true, 
			resolvers: [VantResolver()], 
		}),
	]
})

三、解决 Vant 375 设计尺寸问题

  • Vant自带是375尺寸的,如果我们是750最后插件帮我们转化为375的,也就是我们写的px都是2倍的,vant组件样式也跟着转化那就是375 / 2。但我们不需要它转化,所以在转换时需要忽略它。
  • 如果你的设计稿是375,那就不用将忽略Vant
  • 具体配置
    提示: 我的是在vite.config.ts,有些小伙伴是在全局的postcss.config.js或者其他。总之在这个配置postcss中修改即可。
    vite.config.ts为例
export default defineConfig({
	css: {
		postcss: {
			plugins: [
						postcsspxtoviewport({ 
							... // 其他属性无需修改
							exclude: [/node_modules\/vant/], // 设置忽略文件,用正则做目录名匹配
						}]
		 		}
		}
})

四、这个unplugin-vue-components插件以往的按需导入有何区别呢?

  • 以往我们都是单独在plugins中单独创建vant.js,里面存着要用到的UI组件,用到一个就去手动添加,不要就手动删除,最后在main.js中统一导入,比较繁琐,半自动化。 示例:src/plugins/vant.js
  • 现在已无需在手动去添加、删除,以及去main.ts中引入了,只需要在vite.config.ts中配置好即可,非常方便。这才是真正意义上的UI组件按需导入。
  • 要感谢那些大佬们开发的插件,让我们开发时可以简化一些操作,提高开发效率。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python代码练习:链表——分隔链表

参考知识&#xff1a; 什么是链表Optional有什么用 题目&#xff1a; 题目来源&#xff1a;力扣 代码&#xff1a; from typing import Optionalclass ListNode: 链表结点的数据类型 def __init__(self, val0,nextNone):self.val valself.next nextdef convert_to_linked…

Linux环境之Centos安装Docker流程

Linux环境之Centos/Rocky安装Docker流程我们今天详细分享一下&#xff1a;直接采用阿里云镜像安装 docker-ce镜像_docker-ce下载地址_docker-ce安装教程-阿里巴巴开源镜像站 1、进来之后看到 2、先查看是否已经安装了Docker yum list dockerdocker version 3、如果没有安装…

写点东西《什么是网络抓取?》

写点东西《什么是网络抓取&#xff1f;》 什么是网络抓取&#xff1f; 网络抓取合法吗&#xff1f; 什么是网络爬虫&#xff0c;它是如何工作的&#xff1f; 网络爬虫示例 网络抓取工具 结论 您是否曾经想同时比较多个网站上同一件商品的价格&#xff1f;或者自动提取您最喜欢的…

聚焦行业翘楚~2024武汉国际氢能源及燃料电池产业展览会

聚焦行业翘楚~2024武汉国际氢能源及燃料电池产业展览会 2024武汉国际氢能源及燃料电池产业博览会 同期举办&#xff1a;2024世界汽车制造技术暨智能装备博览会 时间&#xff1a;2024.8.14-16 地点&#xff1a;武汉国际博览中心 邀请函 主办单位&#xff1a; 湖北省汽车行…

vscode安装和基本设置

目录 vscode安装和基本设置1.HTML标签2.标签属性3.HTML基本结构4.安装vscode5.安装Live Server插件6.HTML注释7.文档说明8.HTML字符编码9.HTML设置语言10.HTML标准结构 vscode安装和基本设置 1.HTML标签 标签 又称 元素&#xff0c;是HTML的基本组成单位。标签分为&#xff1…

推荐一款低成本半桥驱动器集成电路 SIC631CD-T1-GE3

SIC631CD-T1-GE3 是经过优化的集成功率级解决方案用于同步降压应用&#xff0c;提供大电流、高电压效率高&#xff0c;功率密度高。使电压调节器设计能够提供高达50 A的电流每相持续电流。内部功率MOSFET利用Vishay的最先进的第四代TrenchFET技术行业基准绩效将显著降低开关和传…

Qt单个字符判断

1.相关说明 字符的Unicode编码、单个字符的判断 2.界面绘制 3.相关主要代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui;…

Windows 下 PYQT开发环境的搭建:

(1)环境搭建&#xff1a; PYQT 安装包&#xff1a; Anaconda&#xff1a; Anaconda3-2023.09-0-Windows-x86_64 pycharm&#xff1a; pycharm 2019.3 下载包&#xff1a; Anaconda:下载成功 |蟒蛇 (anaconda.com) pycharm: pycharm安装包_pycharm用copilotchat资源-CSD…

如何提高问卷填写率:有效策略与技巧分享

解决了调查问卷制作这个难题&#xff0c;怎么让更多的人填写又是一个让人头大的难题。 那有什么好的方式可以帮助我们尽可能地让更多的人填写问卷额&#xff0c;我整理了以下方法&#xff1a; 1、调查问卷尽可能做的美观一些。 设想一下&#xff0c;如果我们是填写者&#xff…

代码随想录算法训练营第五天 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

代码随想录算法训练营第五天 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和 文章目录 代码随想录算法训练营第五天 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和1 哈希表理论基础1.1 哈希表的内部实现原理1.2 哈希函数1.3 哈希…

链表练习 Leetcode 61.旋转链表

给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4 输出&#xff1a;[2,0,1]…

什么是小红书seo,家居品牌关键词攻略

在如今移动互联网时代&#xff0c;媒介投放已经成为企业进行品牌传播的重要手段之一&#xff0c;这其中就小红书来说&#xff0c;其以其独特的内容方式和用户粘性而受到广大用户的喜爱。今天我们来针对大家都不陌生的seo&#xff0c;来说说什么是小红书seo&#xff0c;家居品牌…

HarmonyOS应用开发者初级认证试题库(鸿蒙)

目录 考试链接&#xff1a; 流程&#xff1a; 选择&#xff1a; 判断&#xff1a; 单选&#xff1a; 多选&#xff1a; 考试链接&#xff1a; 开发者能力认证-职业认证-鸿蒙能力认证-华为开发者学堂 (huawei.com)https://developer.huawei.com/consumer/cn/training/dev-…

Vue 如何把computed里的逻辑提取出来

借用一下百度的ai 项目使用&#xff1a; vue 文件引入 <sidebar-itemv-for"route in routes":key"route.menuCode":item"route":base-path"route.path"click"onColor"/>import { handleroutes } from "./handle…

Ceph分布式存储(1)

目录 一.ceph分布式存储 Ceph架构&#xff08;自上往下&#xff09; OSD的存储引擎&#xff1a; Ceph的存储过程&#xff1a; 二. 基于 ceph-deploy 部署 Ceph 集群 20-40节点上添加3块硬盘&#xff0c;一个网卡&#xff1a; 10节点为admin&#xff0c;20-40为node&…

智慧公厕:打造智慧城市公共厕所信息化管理的新升级

在现代社会中&#xff0c;随着科学技术的不断进步与应用&#xff0c;智慧公厕作为公共服务设施&#xff0c;正迎来一次新的升级与革新。利用先进技术&#xff0c;智慧公厕实现了信息化升级&#xff0c;能够实时监测人员、环境和设备状况&#xff0c;提高使用效率、安全性、舒适…

C++ mapset

目录 相关知识介绍&#xff1a; 一、set 1、set的介绍 2、set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器 4. set的容量 5. set修改操作 6. 举例演示 二、multiset 1、multiset的介绍 2、multiset的使用 三、map 1、map的介绍 2、map的使用 1.…

用VSCode玩STM32的烧录工具 CooCox Cortex Flash Programmer

一、下载软件 经热心兄弟推荐的版本&#xff0c;不知道有没有版权&#xff0c;如有版权问题&#xff0c;请通知删除。 CSDN - 0积分下载&#xff1a;https://download.csdn.net/download/qq_49053936/88744187 二、生成bin文件 插件不同&#xff0c;方法有所不同&#xff0c;各…

IntelliJ IDEA使用学习

一、安装教程 网上自行下载&#xff0c;CSDN不然过审二、使用教程 2.1 快捷键操作与设置 设置 Setting——>按键映射——>选择顺手的系统快捷键 编写代码 CtrlShift Enter&#xff0c;语句完成。 “&#xff01;”&#xff0c;否定完成&#xff0c;输入表达式时按 …

vscode mysql cmake windows 常见问题和推荐文章

1.在windows中安装mingw64和cmake&#xff08;可查一下网上的安装教程&#xff09;&#xff0c;配置环境变量 2.在vscode中用CMake构建项目的时候&#xff0c;可能会出现这样的问题:“The C compiler identification is unknownn...”,可参考这篇博客 在windows下使用Vscode用…