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

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

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

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

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

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

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

手动按需加载

其实我们上面的例子,是手动按需加载,也就是,我们想用什么组件,就得注册一遍,比如我想用这些组件,我就得一个一个去引用,去手动按需加载:5x128资讯网——每日最新资讯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就出场了,他可以让你不用自己去引入,去按需加载,而是当你用到了,他会自动帮你加载这一个组件~5x128资讯网——每日最新资讯28at.com

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

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

5x128资讯网——每日最新资讯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>

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

类型提示

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

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

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

  • Input
  • Select
  • Form

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

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

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

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

基本原理

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为&ldquo;On
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top