在vite中,如何让vue项目优雅的自动引入组件

前言

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

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

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

安装的话应该都会 :

js 复制代码
//直接npm i 梭哈
npm i unplugin-vue-components unplugin-auto-import vite-plugin-style-import unplugin-icons

unplugin-vue-components

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

js 复制代码
  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()],//指定自动引入的组件库,也就是从插件中导出的那个
    }),
   ],
});

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

js 复制代码
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来对样式的自动导入了

js 复制代码
 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组件无需引入样式也可以正常展示了

js 复制代码
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的次数

js 复制代码
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了

js 复制代码
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来进行自动引入

js 复制代码
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,
    }),
   ],
});

使用的时候也是有点特殊

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

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

结尾

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

相关推荐
weixin_382395232 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__2 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.3 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~3 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华4 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子6 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅7 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni7 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学8 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端