Vue3+Vite项目按需自动导入配置以及一些常见问题修复

 更新时间:2023年02月08日 10:52:24   作者:Sophie_U  
Vite是一种新型前端构建工具,能够显著提升前端开发体验,下面这篇文章主要给大家介绍了关于Vue3+Vite项目按需自动导入配置以及一些常见问题修复的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、Vue API自动导入

解决的问题:避免在每个vue组件中都重复性的去声明ref,reactive等。如下:

import {ref, reactive} from 'vue' // 配置自动导入,用来省略这句手动引入 
const test = ref('aaaa')

1.1 配置unplugin-auto-import

具体配置:

安装vite插件:unplugin-auto-import

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite';
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
      imports: ['vue'],
    }),
  ],
});

1.2 可能遇到ts,eslint不识别而导入报错的问题

1、typescript 报错:'reactive' is not defined.

原因:TS未识别到vue api,没有相应的模块声明文件

处理:在vite中配置并生成auto-imports.d.ts ,并在tsconfig.json中引入

// vite.config.js
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
      imports: ['vue'],
      // 生成自动导入的TS声明文件
       dts: "/auto-import.d.ts", 
    }),
  ],
});

tsconfig.json

{
	 "include": [
	    "src/**/*.d.ts",
	    "./*.d.ts",
	    "./auto-imports.d.ts" // 导入上一步生成的配置文件
	  ],
}

2、eslint不识别报错 error 'reactive' is not defined no-undef

原因:未配置自动导入相应的eslint规则
处理:通过autoimport中的配置生成对应.eslintrc-auto-import.json配置文件,并在.eslintrc中引入

// vite.config.js  
{
	// ......
	 AutoImport({
      imports: ["vue"],
      resolvers: [ElementPlusResolver()],
      dts: "/auto-import.d.ts",
      eslintrc: {
        enabled: true,  // 1、改为true用于生成eslint配置。2、生成后改回false,避免重复生成消耗
      },
    }),
}
 extends: [
    //....此处活力之前配置.
    "./.eslintrc-auto-import.json",
  ],

1.3 配置src/component目录下的组件自动引入

在页面组件中,不用手动导入组件,直接使用组件的方式:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
      imports: ['vue'],
    }),
	Components({
      // 指定自动导入的组件位置,默认是 src/components
       dirs: ['src/components','src/otherComponents'],
    }),
  ],
});

二、按需引入UI组件库(antd,element-plus)

2.1、按需引入element-plus

官方文档很清晰,用到unplugin-vue-components unplugin-auto-import这两款插件

// vite.config.ts
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  // ...
  plugins: [
    // ...
    AutoImport({
    // 自动导入element相关函数,如:ElMessage, ElMessageBox..
      resolvers: [ElementPlusResolver()],
    }),
    Components({
    // 自动导入element相关组件
      resolvers: [ElementPlusResolver()],
    }),
  ],
})

2.2 ant-design-vue 按需引入

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({
  plugins: [
    vue(),
    Components({
      resolvers: [
        AntDesignVueResolver(),
      ],
    }),
  ]
})

2.3 自动导入 Element Plus Icon

element-plus 图标是用 svg 渲染的,需要额外的导入方法。官方文档对于icons也有相应说明。

  • 安装额外插件:npm install -D unplugin-icons
  • 配置自动导入
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite';
import Icons from 'unplugin-icons/vite';
import IconsResolver from 'unplugin-icons/resolver';
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [
        // ....
        // 自动导入图标组件
        IconsResolver({
          prefix: 'Icon',
        }),
      ],
    }),
    Components({
      resolvers: [
 		// .....
        // 自动注册图标组件
        IconsResolver({
          enabledCollections: ['ep'], //@iconify-json/ep 是 Element Plus 的图标库,所以 IconsResolver 配置了 enabledCollections: ['ep']
        }),
      ],
    }),
    Icons({
      autoInstall: true,
    }),
  ],
});

注意:通过此方法自动引入后,使用icon时,请采用以下方式才生效。(添加i-eq作为icon前缀)

<el-icon :size="70" color="#409EFC" class="no-inherit">
 <i-ep-share />
</el-icon>

三、关于配置文件

unplugin-auto-import会默认在要目录生成auto-imports.d.ts文件,unplugin-vue-components对应会在根目录生成components.d.ts文件,分别描述自动导入的 API、component。通过在tsconfig.json的include中引入对应配置文件,避免TS报错。

AutoImport({
  // ...
  // 配置文件生成位置,默认是根目录 /auto-imports.d.ts
  // dts: './auto-imports.d.ts',
}),
Components({
  // ...
  // 配置文件生成位置,默认是根目录 /components.d.ts
  // dts: './components.d.ts',
}),

总结

到此这篇关于Vue3+Vite项目按需自动导入配置以及一些常见问题修复的文章就介绍到这了,更多相关Vue3 Vite项目按需自动导入配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx如何配置vue项目history的路由模式(非根目录)

    nginx如何配置vue项目history的路由模式(非根目录)

    这篇文章主要介绍了nginx如何配置vue项目history的路由模式(非根目录),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue之过滤器详解

    Vue之过滤器详解

    这篇文章主要为大家介绍了Vue之过滤器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助,希望能够给你带来帮助
    2021-11-11
  • vue3页面组件中怎么获取上一个页面的路由地址

    vue3页面组件中怎么获取上一个页面的路由地址

    这篇文章主要给大家介绍了关于vue3页面组件中怎么获取上一个页面的路由地址的相关资料,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-02-02
  • 关于Vue 3.0引入百度地图不兼容的解决办法

    关于Vue 3.0引入百度地图不兼容的解决办法

    这篇文章主要介绍了关于Vue 3.0引入百度地图不兼容的解决办法,本文通过实例代码给大家分享解决方法,需要的朋友可以参考下
    2022-08-08
  • Vue单文件组件基础模板小结

    Vue单文件组件基础模板小结

    本篇文章主要介绍了Vue单文件组件基础模板小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 深入理解Vue router的部分高级用法

    深入理解Vue router的部分高级用法

    这篇文章主要介绍了Vue router的部分高级用法,主要是针对已经有初步了解Vue-router的人,通过本文主要给大家介绍路由元信息,滚动行为以及路由懒加载这几个的使用方法。感兴趣的朋友一起看看吧
    2018-08-08
  • Vue组件实现触底判断

    Vue组件实现触底判断

    这篇文章主要为大家详细介绍了Vue组件实现触底判断,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • vue-treeselect显示unknown的问题及解决

    vue-treeselect显示unknown的问题及解决

    这篇文章主要介绍了vue-treeselect显示unknown的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 关于ElementUI el-table 鼠标滚动失灵的问题及解决办法

    关于ElementUI el-table 鼠标滚动失灵的问题及解决办法

    这篇文章主要介绍了关于ElementUI el-table 鼠标滚动失灵的问题及解决办法,本文给大家分享问题所在原因及解决方案,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • el-dialog关闭再打开后窗口内容不刷新问题及解决

    el-dialog关闭再打开后窗口内容不刷新问题及解决

    这篇文章主要介绍了el-dialog关闭再打开后窗口内容不刷新问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论