当前位置:首页 > 科技  > 软件

不引用组件库,就能使用它!怎么做到的?

来源: 责编: 时间:2024-01-15 09:21:31 336观看
导读最近看到了一个插件unplugin-vue-components,很好奇,他的作用是什么呢?我借一个小例子给大家说明。我们平时在使用ant-design-vue这类的UI组件库的时候,为了最后打包体积能小一些,都会采用按需加载的方式:import { createAp

最近看到了一个插件unplugin-vue-components,很好奇,他的作用是什么呢?我借一个小例子给大家说明。CrC28资讯网——每日最新资讯28at.com

我们平时在使用ant-design-vue这类的UI组件库的时候,为了最后打包体积能小一些,都会采用按需加载的方式:CrC28资讯网——每日最新资讯28at.com

import { createApp } from "vue";import { Button } from 'ant-design-vue'import App from './App.vue'const app = createApp(App)// 按需加载app.use(Button)app.mount('#app')

接着我们就可以在页面中去使用a-button了:CrC28资讯网——每日最新资讯28at.com

<template>  <a-button @click="handleClick">哈哈哈</a-button></template>

CrC28资讯网——每日最新资讯28at.com

手动按需加载

其实我们上面的例子,是手动按需加载,也就是,我们想用什么组件,就得注册一遍,比如我想用这些组件,我就得一个一个去引用,去手动按需加载:CrC28资讯网——每日最新资讯28at.com

  • Input
  • Select
  • Form
import { createApp } from "vue";import { Button, Input, Form, Select } from "ant-design-vue";import App from "./App.vue";const app = createApp(App);// 手动按需加载app.use(Button).use(Input).use(Form).use(Select);app.mount("#app");

自动按需加载

那怎么才能自动去按需加载呢?这时候unplugin-vue-components就出场了,他可以让你不用自己去引入,去按需加载,而是当你用到了,他会自动帮你加载这一个组件~CrC28资讯网——每日最新资讯28at.com

就比如我在页面里使用了 ant-design-vue 的 button 组件,我并没有在去手动引入加载,我们需要安装这个插件,并进行配置。CrC28资讯网——每日最新资讯28at.com

注意:ant-design-vue 的样式使用的是 css-in-js,所以不需要按需引入样式,但是 element-ui 就需要,因为 element-ui 使用的是样式文件去定义样式:CrC28资讯网——每日最新资讯28at.com

CrC28资讯网——每日最新资讯28at.com

// 安装pnpm i unplugin-vue-components// vite.config.ts 配置import { defineConfig } from "vite";import vue from "@vitejs/plugin-vue";import Components from "unplugin-vue-components/vite";import { AntDesignVueResolver } from "unplugin-vue-components/resolvers";export default defineConfig({  base: "./",  plugins: [    vue(),    Components({      // 生成类型声明文件      dts: true,      resolvers: [        AntDesignVueResolver({          // 是否按需引入组件样式          importStyle: false,        }),      ],    }),  ],});
import { createApp } from "vue";import App from "./App.vue";const app = createApp(App);app.mount("#app");
<template>  <a-button @click="handleClick">哈哈哈</a-button></template>

页面会渲染出来。CrC28资讯网——每日最新资讯28at.com

类型提示

当我们使用unplugin-vue-components后,构建之后,它会帮我们生成一个类型声明文件 components.d.ts,确保我们使用组件的时候,能有类型的提示:CrC28资讯网——每日最新资讯28at.com

CrC28资讯网——每日最新资讯28at.com

这个声明文件也是按需生成的,比如我使用了:CrC28资讯网——每日最新资讯28at.com

  • Input
  • Select
  • Form

他就会给我生成这三个组件的类型声明:CrC28资讯网——每日最新资讯28at.com

CrC28资讯网——每日最新资讯28at.com

想要用这个文件的类型声明,我们需要在 tsconfig.ts 中配置一下:CrC28资讯网——每日最新资讯28at.com

CrC28资讯网——每日最新资讯28at.com

基本原理

我们先来看看,我们在不适用任何组件库、插件的情况下,Vue 会把 a-button解析成一个什么东西:CrC28资讯网——每日最新资讯28at.com

CrC28资讯网——每日最新资讯28at.com

可以看到会被解析成_resolveComponent("a-button"),这个_resolveComponent你可以理解为是一个解析组件的方法,它会从全局去找有没有这个 a-button 全局组件,有的话就渲染出来。CrC28资讯网——每日最新资讯28at.com

当我们配置了unplugin-vue-components + AntDesignVueResolver之后,我们再看看构建后的代码长什么样子:CrC28资讯网——每日最新资讯28at.com

CrC28资讯网——每日最新资讯28at.com

我们可以看到,_resolveComponent被替换成了引入的 button 组件了,也就是当我们使用了AntDesignVueResolver之后,它会去帮我们匹配出 _resolveComponent调用的a-开头的组件,并寻找组件库中对应的组件,去在构建的时候去自动引入,达到按需引入的效果~CrC28资讯网——每日最新资讯28at.com

每一个组件库的匹配规则都是不一样的,我们可以看到unplugin-vue-components支持了这么多组件库呢~CrC28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-60971-0.html不引用组件库,就能使用它!怎么做到的?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 携程代码分析平台,快速实现精准测试与应用瘦身

下一篇: Swift 变量、常量和数据类型

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    7月20日消息,据外媒报道,研究机构的报告显示,在全球智能手机出货量同比仍在下滑的大背景下,印度这一有潜力的市场也未能幸免,出货量同比也有下滑,多家厂
  • iQOO Neo8系列或定档5月23日:首发天玑9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top