vite工程化搭建vue项目之自动按需导入

news2025/1/11 19:55:15

背景

当我们在使用vue3组合式开发的时候,大多数情况下我们的代码可能是这样的

<script setup lang="ts">
import { ref, reactive, toRefs, onMounted, computed } from 'vue';
defineProps({});
</script>

<template>
  <div></div>
  <div></div>
  <div></div>
</template>

像是defineProps,defineEmits这些编辑器宏我们是不需要导入的,因为vue已经帮我们实现了,但是ref, reactive, toRefs, onMounted, computed 这些,如果我们项目中有很多vue文件,每个文件都手动引入的话也不太友好,虽然没啥问题。那么有没有方式能够让我们不需要手动引入就可以直接用呢,就像下面这样:

<script setup lang="ts">
type UserInfoType = {
  name: string
  age: number,
  address?: string
}

const name = ref("于十月666");

const userInfo: UserInfoType = reactive({
  name: '狗子',
  age: 36,
  address: '北京市朝阳区'
})

console.log(userInfo)
</script>

<template>
  <div class="text-[red] text-24px text-stroke-emerald-50">{{ name }}</div>
  <a-button type="primary">555</a-button>
  <StepBackwardOutlined />
</template>

答案当然是可以的,我们需要安装两个插件

pnpm i -D unplugin-auto-import unplugin-vue-components
  • unplugin-auto-import 按需自动导入Vite、Webpack、Rspack、Rollup和esbuild的API。支持TypeScript。
  • unplugin-vue-components Vue的按需组件自动导入。
  • ui库 antd-design-vue,element-plus 官方文档都有介绍,如何实现组件的自动按需引入
    下面是用的antd-design-vue作为ui库做的相关配置
pnpm i ant-design-vue@4.x @ant-design/icons-vue

vite.config.ts

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import UnoCss from "unocss/vite";
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// 官方预设好的AntDesignVue ui库的工具方法
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    vue(), 
    UnoCss(),
    AutoImport({
      include: [
        /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
        /\.vue$/,
        /\.vue\?vue/, // .vue
        /\.md$/, // .md
      ],
      imports: [
      	// 插件预设好包
        'vue',
        'vue-router',
        // 自定义要自动按需引入的npm包
        {
          'axios': [
            // default imports
            ['default', 'axios'], // import { default as axios } from 'axios',
          ],
        }
      ],
      eslintrc: {
      	// 为true的时候,每次启动项目都会生成 auto-imports.d.ts 以及 .eslintrc-auto-import.json、
      	// .eslintrc-auto-import.json这个我们需要在.eslintrc.cjs的extends里面去引入,否则会报错
        enabled: true
      },
      dts: './auto-imports.d.ts', // 插件给自动生成的声明文件,需要我们手动导入
      resolvers: [AntDesignVueResolver()]
    }),
    Components({
      dts: './components.d.ts', // 插件给自动生成的声明文件,需要我们手动导入
      dirs: [], // 如果我们自己的业务组件,如`src/components`下面写的组件也想实习那自动按序导入的话,可以在这里面配置上路径
      resolvers: [
        AntDesignVueResolver({
          importStyle: false, 
          resolveIcons: true
        }),
      ],
    })
  ]
});

.eslintrc.cjs

{
	...
	 extends: [
    "airbnb-base", // eslint-config-airbnb-base
    "airbnb-typescript/base", // eslint-config-airbnb-typescript
    "plugin:vue/vue3-recommended", // eslint-plugin-vue 具体为什么这么配置可以参考文档
    "eslint-config-prettier",
    './.eslintrc-auto-import.json'
  ],
  ...
}

tsconfig.app.json (或者tsconfig.json)中配置上./auto-imports.d.ts

 "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "types/*.d.ts", "./auto-imports.d.ts"]

通过这些配置我们就可以实现在vue组件中想用哪个api,或者组件就用哪个api以及组件
在这里插入图片描述
在这里插入图片描述

关于icon

现在流行的库是iconify iconify
其实关于antd-design-vue,element-ui等ui库的图标都是可以在这里面找到的
在这里插入图片描述
我们完全可以不使用@ant-design/icons-vue,直接去使用iconify上的,关于iconify在vite中结合vue如何使用可以参考vite搭建之优雅的使用icon图标这篇文章,因为我现在没有用到

vite使用iconify的话会用到unplugin-icons下面unplugin-icons/vite以及unplugin-icons/resolver这些包,总之来说可以实现用官方提供的图标集,能实现按需自动引入,也能实现自定义svg等。

实现自定义svg图标的话也可以使用vite-plugin-svg-icons这个插件,如何使用官方都有详细介绍
在这里插入图片描述
总之用不用还是要看情况而定,做一个了解或者储备方案,主要看ui配合不配合~

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

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

相关文章

【介绍下ERP,什么是ERP?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

C++回溯算法

迷宫的所有路径 #include<bits/stdc.h> using namespace std; void func(int,int,int); bool a[110][110]; int b[110]; int c[110]; int top1; int n; int main() {cin>>n;for(int i1;i<n;i)for(int j1;j<n;j)a[i][j]true;b[0]1;c[0]1;a[1][1]false;func(1,…

两条单链表相交求交点-链表题

面试题 02.07. 链表相交 - 力扣&#xff08;LeetCode&#xff09; A和B两个链表&#xff0c;A走完再走BD&#xff0c;B走完再走AD&#xff1b; 这样走的路程一样&#xff0c;动手画一下就发现D点他们会碰到 class Solution { public:ListNode *getIntersectionNode(ListNode …

「PS图像软件下载」Adobe Photoshop专业图像处理软件资源获取!

Photoshop&#xff0c;无论是对于初学者还是资深设计师&#xff0c;Photoshop都以其易上手且深度足够的特性&#xff0c;赢得了广泛的赞誉。 在修图方面&#xff0c;Photoshop的表现尤为出色。无论是调整色彩平衡、裁剪图片&#xff0c;还是去除瑕疵、增强细节&#xff0c;Phot…

02 Pytorch_NLP

1. N-gram n决定关联信息 2. TF____IDF TF&#xff1a;词频 IDF&#xff1a;逆向序列 假如&#xff1a;TF * IDF 就是当前的文件&#xff0c;那么乘积反而更大&#xff01; 因为它只出现在 特定的文章中&#xff01; TF-IDF 简介 TF-IDF&#xff08;Term Frequency-Inverse…

bugku---misc---赛博朋克

1、下载附件解压之后是一个txt文本&#xff0c;查看文本的时候看到头部有NG的字样 2、把txt改为png后缀得到一张图片 3、binwalk没发现奇怪的地方&#xff0c;分离出来还是图片 4、stegslove分析&#xff0c;切换图片没有发现奇怪地方 5、将通道rgb置为0。出现了flag但是flag不…

微信小程序-uniapp-切换tab时数据列表如何切换?

如图&#xff1a; 这里有两个tab&#xff0c;要保证每次切换后列表保持不变&#xff0c;就必须在运行时要有两个持久化的数据源&#xff0c;每个tab是一个列表&#xff0c;让我们来设计一下这样的数据结构。 首先我们的数据结构是这样的&#xff1a; 体现在vue的data是这样的&a…

opencv 通过滑动条调整阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强参数 并实时预览效果

使用PySimpleGUI库创建了一个图形用户界面(GUI),用于实时处理来自OpenCV摄像头的图像。它允许用户应用不同的图像处理效果,如阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强。用户可以通过滑动条调整相关参数。 完整代码在文章最后,可以运行已经测试; 代码的…

【C++取经之路】继承

目录 继承的概念及定义 单继承的格式 继承方式和访问限定符 继承后子类访问基类成员的权限 基类和派生类对象赋值转换 切片 继承中的作用域 引申&#xff1a;重载和隐藏的区别 派生类的默认成员函数 继承与友元 继承与静态成员 如何实现一个不能被继承的类 复杂的…

Ubuntu 24.04 屏蔽snap包

Ubuntu 24.04 屏蔽snap包 屏蔽 这里所说的屏蔽指的是&#xff1a;禁止sudo apt install firefox时安装snap版本的包。 如需卸载snap&#xff0c;请使用关键词搜索。 命令行 cat <<EOF | sudo tee /etc/apt/preferences.d/snap-apps-disable Package: chromium* firef…

SpringBoot启动流程、起步依赖、配置文件、运行方式与核心注解

讲一讲SpringBoot启动流程 springboot项目在启动的时候, 首先会执行启动引导类里面的SpringApplication.run(AdminApplication.class, args)方法 这个run方法主要做的事情可以分为三个部分 : 第一部分进行SpringApplication的初始化模块&#xff0c;配置一些基本的环境变量、…

鲁教版八年级数学下册-笔记

文章目录 第六章 特殊平行四边形1 菱形的性质与判定2 矩形的性质与判定3 正方形的性质与判定 第七章 二次根式1 二次根式2 二次根式的性质3 二次根式的加减二次根式的乘除 第八章 一元二次方程1 一元二次方程2 用配方法解一元二次方程3 用公式法解一元二次方程4 用因式分解法解…

RERCS系统开发实战案例-Part04 创建FPM Application的搜索组件UIBB及其Feeder Class创建分配

继FPM Application创建完成后&#xff0c;新增对应的UIBB。 1、通过事务码 FPM_WB 进入FPM Application的配置界面 1&#xff09;条件搜索组件UIBB&#xff08;用于页面添加字段作为搜索条件&#xff09;&#xff1b; 2&#xff09;编辑配置标识和标题&#xff1b; 3&#xff…

TF-IDF算法教程

前言 TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种常用的文本分析技术&#xff0c;广泛应用于信息检索和文本挖掘领域。它是一种统计方法&#xff0c;用于评估一个词语在一个文档中的重要程度。TF-IDF的核心思想是&#xff1a;如果一个词语…

CXL协议中 Register Locator DVSEC详解

✨ 前言&#xff1a; Register Locator DVSEC&#xff08;Designated Vendor-Specific Extended Capability&#xff09;是一种PCI Express&#xff08;PCIe&#xff09;配置空间的能力&#xff0c;专为CXL&#xff08;Compute Express Link&#xff09;技术中的设备设计。这包…

linux中DNS域名解析服务

DNS系统在网络中的作用就是维护一个地址数据库&#xff0c;其中记录了各种主机域名与IP地址的对应关系&#xff0c;以便为客户程序提供正向或反向的地址查询服务&#xff0c;即正向解析与反向解析。 正向解析&#xff1a;根据域名查IP地址&#xff0c;即将指定的域名解析为相对…

30 岁的程序员,要有 “归零“ 心态

大家好&#xff0c;我是码农先森。 古话说的 “三十而立”&#xff0c;正是担重之时&#xff0c;却大部分人在职场中都处于不上不下的尴尬境地。已经没有刚毕业时那股子冲劲&#xff0c;被生活和工作磨平了棱角。 在技术思想方面&#xff0c;似乎已经触及到了天花板&#xff…

Sqoop学习详细介绍!!

一、Sqoop介绍 Sqoop是一款开源的工具&#xff0c;主要用于在Hadoop(HDFS/Hive/HBase)与传统的数据库(mysql、postgresql...)间进行数据的传递&#xff0c;可以将一个关系型数据库&#xff08;例如 &#xff1a; MySQL ,Oracle ,Postgres等&#xff09;中的数据导进到Hadoop的H…

提升营业厅服务质量:DuDuTalk柜台录音设备,台席质检的新选择

在快节奏的营业厅日常运营中&#xff0c;柜台服务的质量直接影响着客户的满意度和企业的品牌形象。据最新数据显示&#xff0c;全国运营商营业厅数量近100万家&#xff0c;成为服务十几亿用户的前线窗口。然而&#xff0c;在提供日常服务的同时&#xff0c;客户投诉事件也随之而…

单目标应用:基于蛇鹫优化算法SBOA的微电网优化(MATLAB代码)

一、微电网模型介绍 微电网多目标优化调度模型简介_vmgpqv-CSDN博客 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、蛇鹫优化算法求解微电网 2.1算法简介 蛇鹫优化算法&#xff08;Secre…