API 自动导入
setup
语法让我们不用再一个一个的把变量和方法都return
出去就能在模板上使用,大大的解放了我们的双手。然而对于一些常用的Vue
API,比如ref
、computed
、watch
等,还是每次都需要我们在页面上手动进行import
。
我们可以通过unplugin-auto-import
实现自动导入,无需import
即可在文件里使用Vue
的API。
安装
npm i unplugin-auto-import -D
1
配置
// vite.config.ts
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
plugins: [
AutoImport({
// dts: 'src/auto-imports.d.ts', // 可以自定义文件生成的位置,默认是根目录下
imports: ['vue']
})
]
})
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
安装配置完会自动生成auto-imports.d.ts
文件。
// auto-imports.d.ts
// Generated by 'unplugin-auto-import'
// We suggest you to commit this file into source control
declare global {
const computed: typeof import('vue')['computed']
const createApp: typeof import('vue')['createApp']
const customRef: typeof import('vue')['customRef']
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
const defineComponent: typeof import('vue')['defineComponent']
const effectScope: typeof import('vue')['effectScope']
const EffectScope: typeof import('vue')['EffectScope']
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
const getCurrentScope: typeof import('vue')['getCurrentScope']
const h: typeof import('vue')['h']
const inject: typeof import('vue')['inject']
const isReadonly: typeof import('vue')['isReadonly']
const isRef: typeof import('vue')['isRef']
// ...
}
export {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
使用
<script lang="ts" setup name="OrderList">
// 不用import,直接使用ref
const count = ref(0)
onMounted(() => {
console.log('mounted===')
})
</script>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
上面我们在vite.config.ts
的配置里只导入了vue
,imports: ['vue']
,除了vue
的你也可以根据文档导入其他的如vue-router
、vue-use
等。
个人建议只对一些比较熟悉的API做自动导入,如vue
的API我们在开发时都比较熟悉,闭着眼都能写出来,对于一些不大熟悉的像VueUse
这种库,还是使用import
更好一些,毕竟编辑器都有提示,不易写错。
解决eslint
报错问题
在没有import
的情况下使用会导致eslint
提示报错,可以通过在eslintrc.js
安装插件**vue-global-api**
解决。
// 安装依赖
npm i vue-global-api -D
// eslintrc.js
module.exports = {
extends: [
'vue-global-api'
]
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9