摆脱手动依赖引入,自动引入依赖
学习目标
unplugin-vue-components
和unplugin-auto-import
基本使用- 透彻运用
unplugin-vue-components
和unplugin-auto-import
来自动引入各种内容
基本使用
unplugin-auto-import
项目中的js模块可以用 unplugin-auto-import
来自动引入。
- 项目本地编写的一些具方法自动引入
- 一些第三方库的自动引入
在 vite.config.js
文件中引入,配置插件。
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
plugins: [
vue(),
AutoImport({
imports: [
// auto-import内置vue、vue-router、react这些常见基本库的引入规则
'vue'
]
})
]
})
插件内置了 vue
的规则,所以可以直接写。后续文件中无需手动引入 ref
等模块,可直接使用。
如果是想用自己封装的函数方法,需要做如下配置:
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
plugins: [
vue(),
AutoImport({
imports: [
// auto-import内置vue、vue-router、react这些常见基本库的引入规则
'vue',
],
// 配置那些本地目录,支持自动引入
dirs: [
'./src/utils/**'
]
})
]
})
如果想要自动引入第三方库如 axios
、loadsh
等,没有内置支持的,则需要自己编写规则。
import AutoImport from 'unplugin-auto-components/vite'
export default defineConfig({
plugins: [
vue(),
AutoImport({
imports: [
'vue',
{
// 放自定义的自动引入库
loadsh: [
// 哪些方法能自动引入
'concat'
]
}
],
// 配置那些本地目录,支持自动引入
dirs: [
'./src/utils/**'
]
})
]
})
上方配置本质上是通过 import {concat} from 'loadsh'
引入的,因此可以设置别名。
import AutoImport from 'unplugin-auto-components/vite'
export default defineConfig({
plugins: [
vue(),
AutoImport({
imports: [
{
// 放自定义的自动引入库
loadsh: [
// 哪些方法能自动引入
'concat',
['compact', 'cp']
]
}
]
})
]
})
这么修改它就会设置上别名,本质上是 import {compact as cp} from 'loadsh'
。
像 axios
这种全部导入默认部分的,实际上导入的是 default
,因此可以通过设置别名的方式自动引入。
import AutoImport from 'unplugin-auto-components/vite'
export default defineConfig({
plugins: [
vue(),
AutoImport({
imports: [
{
// 放自定义的自动引入库
loadsh: [
// 哪些方法能自动引入
'concat',
['compact', 'cp']
],
axios: [
['default', 'axios']
]
}
]
})
]
})
最终编译出来的效果等价于 import axios from 'axios'
。
unplugin-vue-components
Vue项目组件 unplugin-auto-import
虽可用来自动引入,但很多 vue
项目组件是用 .vue
文件编写,unpluin-auto-import
做不到自动引入,所以有这么一个专门为 vue
准备的自动引入库。而 react
纯粹的就是 js
,所以 react
可以直接使用 unplugin-auto-import
。
- 如何引入自动本地组件
- 自己开发的组件库如何做到自动支持自动引入
同样的,需要先去 vite.config.js
文件,做相关配置,以 element-plus
举例。
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
vue(),
Components({
// 便携组件库的自动引入规则。内置了主流的组件,如element、antd、vant等
resolvers: [
ElementPlusResolver()
]
})
]
})
本地组件也想要实现自动引入,和 unplugin-auto
一样通过 dirs
配置。
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
vue(),
Components({
// 便携组件库的自动引入规则。内置了主流的组件,如element、antd、vant等
resolvers: [
ElementPlusResolver()
],
// 存放组件的文件夹
dirs: [
'./src/components',
]
})
]
})
如果想要自定义 resolver
来支持自主开发的组件库,则需要配置一个方法,该方法可接收所使用的组件名称。判断名称是否是自主开发的组件(有固定的命名),符合条件 return
一个对象。该对象主要属性为:
- Name:组件名称
- from:来源文件夹路径
- style:样式文件路径
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
vue(),
Components({
// 便携组件库的自动引入规则。内置了主流的组件,如element、antd、vant等
resolvers: [
ElementPlusResolver(),
(componentName) => {
if (componentName.includes('My')) {
// 引入规则
return {
name: componentName,
from: 'myui',
sideEffects: `myui/${componentName}/style/index.css`
}
}
}
],
// 存放组件的文件夹
dirs: [
'./src/components',
]
})
]
})
后续编译后等价于引入组件和样式文件。
import { MyButton } from 'myui'
import 'myui/MyButton/style/index.css'
拓展
若想要了解如何开发自己的组件库,指路跳转:组件库搭建 。