vue项目优雅实现自动引入组件的方法详解

 更新时间:2023年09月13日 10:00:00   作者:iceCode  
在我们写vue项目的时候,都会引入一些组件库,有时候有可能还不止一个组件库,那么如何优雅的实现自动引入组件呢,下面小编就来和大家详细讲讲吧

前言

在我们写vue项目的时候,都会引入一些组件库,有时候有可能还不止一个组件库,这样会使我们的项目打包之后特别庞大,再或者在组件内使用大量的import引入所使用的组件,让其打包之后的项目不那么庞大,不论哪一种对开发者都不太友好。

接下来分享几个插件,让组件中使用较少的import或者不使用import就能按需引入组件供我们使用

  • unplugin-vue-components: 自动按需因引入组件
  • vite-plugin-style-import:自动引入样式
  • unplugin-auto-import:自动引入api
  • unplugin-icons:自动引入图标

安装的话应该都会 :

//直接npm i 梭哈
npm i unplugin-vue-components unplugin-auto-import vite-plugin-style-import unplugin-icons

unplugin-vue-components

安装完成之后,在vite.confing.ts引入即可,在这里使用的element-plus组件库

//vite.confing.ts 
import Components from "unplugin-vue-components/vite";
//引入饿了么的组件,只要安装的ep,这里就会有提示的
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
export default defineConfig({
  plugins: [
  //...
    Components({
      dts: "./src/components.d.ts",//创建ts文件
      extensions:['vue'],//指定文件的后缀
      dirs: ["src/components/"],//指定路径,自动导入自定义组件
      resolvers: [ElementPlusResolver()],//指定自动引入的组件库,也就是从插件中导出的那个
    }),
   ],
});

这样简单的配置就完成了,这个时候我们在组件里面就可以为所欲为的使用组件了

app.vue

<template>
  <div>
    <el-button @click="btn">点击</el-button>
    <!-- 在插件内,指定的路径下,也可以直接使用自定义组件 -->
    <HelloWorld/>
  </div>
</template>
<script setup lang="ts">
const btn = () => {
  ElMessage.error("iceCode");
};
</script>

vite-plugin-style-import

当然有时候,不是所有的组件都自带样式的,就例如antdv中的message提示组件,这个是需要单独引入样式的

这里就可以使用vite-plugin-style-import来对样式的自动导入了

 vite.confing.ts

import { createStyleImportPlugin, AndDesignVueResolve} from "vite-plugin-style-import";
//2.0之前
//import styleImport { AndDesignVueResolve} from "vite-plugin-style-import";
export default defineConfig({
  plugins: [
  //...
    createStyleImportPlugin({
      resolves: [AndDesignVueResolve()],//这里引入
    }),
     //下面这种写法使在这个插件2.0之前的写法
    // styleImport( {
    //   libs: [
    //     {
    //       libraryName: "ant-design-vue",
    //       esModule: true,
    //       resolveStyle: (name: string) => {
    //         return `ant-design-vue/dist/antd.css`;
    //       },
    //     },
    //   ],
    // })
   ],
});

这个时候我们再使用antdv的message组件无需引入样式也可以正常展示了

app.vue

<template>
  <div>
    <Button @click="btn">点击</Button>
  </div>
</template>
<script setup lang="ts">
import { Button, message } from "ant-design-vue";
const btn = () => {
  message.success("iceCode");
};
</script>

unplugin-auto-import

在vue3选项式中,我们需要大量使用import引入vue的api,unplugin-auto-import可以使我们在写vue的时候不用再引入refreactive等api了,减少了我们频繁写import的次数

vite.confing.ts

import AutoImport from "unplugin-auto-import/vite"; //引入组件
export default defineConfig({
  plugins: [
   ///...
   AutoImport({
      imports: ["vue", "vue-router", "pinia", "@vueuse/core"],//这里是自动引入api的项目
      dts: "./src/auto-imports.d.ts",//在这创建.d.ts文件
      resolvers: [ ElementPlusResolver()],//组件中的api也是可以自动引入的,比如message是需要单独引入的
    }),
   ],
});

这样,我们再在vue3中进行一些操作的时候就无需再引入api了

app.vue

<script setup lang="ts">
const num = ref<number>(0);
const newNum = computed<number>( () => num.value + 1 );
interface n{
  n:number
}
const numObj = reactive<n>({
  n: newNum.value,
});
console.log(toRaw(numObj));
</script>

unplugin-icons

如果项目中需要大量引入图标的时候,又不想手动引入,就可以使用unplugin-icons来进行自动引入

vite.confing.ts

//自动引入图标需要搭配自动引入组件的插件来用
import Components from "unplugin-vue-components/vite";
import Icons from "unplugin-icons/vite";
import IconsResolve from "unplugin-icons/resolver";
export default defineConfig({
  plugins: [
  //...
    Components({
      dts: "./src/components.d.ts",//创建ts文件
      extensions:['vue'],//指定文件的后缀
      dirs: ["src/components/"],//指定路径,自动导入自定义组件
      resolvers: [IconsResolve()],//图标组件
     // { enabledCollections: ['ep'], },有的会在IconsResolve()中传入这个参数,但我测试不传也是可以的
    }),
      Icons({
      //使用哪种框架解析
      compiler: "vue3",
      //是否自动安装
      autoInstall: true,
    }),
   ],
});

使用的时候也是有点特殊

<template>
  <div>
  <!-- 这是饿了么组件的icon使用,需要加上i-ep- 才能正常使用 -->
    <i-ep-user/>
  </div>
</template>

这个自动引入icon的插件,如果不是项目中需要大量使用图标,也不太推荐使用,使用的地方不太多,加入这个插件之后,会使打包的体积变大

整体代码

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import Components from "unplugin-vue-components/vite";
import AutoImport from "unplugin-auto-import/vite";
import Icons from "unplugin-icons/vite";
import IconsResolve from "unplugin-icons/resolver";
import { AntDesignVueResolver, ElementPlusResolver } from "unplugin-vue-components/resolvers";
import { createStyleImportPlugin, AndDesignVueResolve, ElementPlusResolve } from "vite-plugin-style-import";
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    //自动引入api
    AutoImport({
      imports: ["vue", "vue-router", "pinia", "@vueuse/core"],
      dts: "./src/auto-imports.d.ts",
      resolvers: [AntDesignVueResolver(), ElementPlusResolver()],
    } ),
    //自动引入组件
    Components({
      dts: "./src/components.d.ts",
      extensions: ["vue"],
      dirs: ["src/components/"],
      resolvers: [
        AntDesignVueResolver({
          importStyle: false, // css in js
        }),
        ElementPlusResolver(),
        IconsResolve(),
      ],
    } ),
    // 自动引入样式
    createStyleImportPlugin({
      resolves: [AndDesignVueResolve(), ElementPlusResolve()],
    } ),
    //自动引入icon
    Icons({
      //使用哪种框架解析
      compiler: "vue3",
      //是否自动安装
      autoInstall: true,
    }),
  ],
});

结尾

在自动引入组件和自动引入api中会发现有一个创建ts文件的属性,如果是使用的ts项目,务必要写,因为会使ts报错,默认情况下这两个插件会在根目录下创建好.d.ts文件,但是我们的项目文件都在src目录下,即使根目录下有着ts文件,却访问不到,这里就是主动在src目录下添加对应的.d.ts文件,防止自动引入之后ts不知道,给我们报错!

以上就是vue项目优雅实现自动引入组件的方法详解的详细内容,更多关于vue引入组件的资料请关注脚本之家其它相关文章!

相关文章

  • VUE3 Vite打包后动态图片资源不显示问题解决方法

    VUE3 Vite打包后动态图片资源不显示问题解决方法

    这篇文章主要给大家介绍了关于VUE3 Vite打包后动态图片资源不显示问题的解决方法,可能是因为在部署后的服务器环境中对中文文件名的支持不完善,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • vue proxyTable的跨域中pathRewrite配置方式

    vue proxyTable的跨域中pathRewrite配置方式

    这篇文章主要介绍了vue proxyTable的跨域中pathRewrite配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue2.0 路由模式mode=

    vue2.0 路由模式mode="history"的作用

    这篇文章主要介绍了vue2.0 路由模式mode="history"的作用,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-10-10
  • vue-cli webpack 引入swiper的操作方法

    vue-cli webpack 引入swiper的操作方法

    今天小编就为大家分享一篇vue-cli webpack 引入swiper的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue-amap安装和用法步骤

    vue-amap安装和用法步骤

    vue-amap是饿了么开源的一套基于 Vue 2.0 和高德地图的地图组件。接下来通过本文给大家介绍vue-amap安装和使用,需要的朋友可以参考下
    2021-12-12
  • vue实现日历组件

    vue实现日历组件

    这篇文章主要为大家详细介绍了vue实现日历组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Vue侧滑菜单组件——DrawerLayout

    Vue侧滑菜单组件——DrawerLayout

    本文介绍一个简单的DrawerLayout(类似Android的DrawerLayout)布局组件的实现,基于Vue.js侧滑菜单组件的实现代码大家通过本文一起学习吧
    2017-12-12
  • 解决vue2 在mounted函数无法获取prop中的变量问题

    解决vue2 在mounted函数无法获取prop中的变量问题

    这篇文章主要介绍了vue2 在mounted函数无法获取prop中的变量的解决方法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • 使用Vue调取接口,并渲染数据的示例代码

    使用Vue调取接口,并渲染数据的示例代码

    今天小编就为大家分享一篇使用Vue调取接口,并渲染数据的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue-dialog的弹出层组件

    vue-dialog的弹出层组件

    这篇文章主要为大家详细介绍了vue-dialog的弹出层组件,可以通过npm引用的组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03

最新评论