1.安装 unplugin-auto-import 插件
npm i unplugin-auto-import -D
2在 vite.config.js 中配置
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', 'vue-router'],
}),
],
});
配置完成,这样在每个 vue 页面都不需要手动配置 import {ref, reactive, …} from “vue” 了。但是还会遇到 ts, eslint 不识别而导入报错的问题。
3. typescript 报错:‘reactive’ is not defined.
原因:TS 未识别到 vue api,没有相应的模块声明文件 处理:在 vite 中配置并生成 auto-imports.d.ts ,并在 tsconfig.json 中引入
vite.config.js
// vite.config.js
export default defineConfig({
plugins: [
vue(),
AutoImport({
// 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
imports: ['vue'],
// 生成自动导入的TS声明文件
dts: "/auto-import.d.ts",
}),
],
});
tsconfig.json
// tsconfig.json
{
"include": [
"src/**/*.d.ts",
"./*.d.ts",
"./auto-imports.d.ts" // 导入上一步生成的配置文件
],
}
4. eslint 无法识别报错 error ‘reactive’ is not defined no-undef
原因:未配置自动导入相应的 eslint 规则 处理:通过 autoimport 中的配置生成对应 .eslintrc-auto-import.json 配置文件,并在 .eslintrc 中引入
{
// ......
AutoImport({
imports: ['vue', 'vue-router', 'pinia'],
dts: "/auto-import.d.ts",
eslintrc: {
enabled: true, // 1、改为true用于生成eslint配置。2、生成后改回false,避免重复生成消耗
filepath: './.eslintrc-auto-import.json',
globalsPropValue: true
},
}),
}
.eslintrc.js
// .eslintrc.js
extends: [
"./.eslintrc-auto-import.json",
],
5.我的配置
//.eslintrc-auto-import.json",
{
"globals": {
"Component": true,
"ComponentPublicInstance": true,
"ComputedRef": true,
"EffectScope": true,
"InjectionKey": true,
"PropType": true,
"Ref": true,
"VNode": true,
"acceptHMRUpdate": true,
"computed": true,
"createApp": true,
"createPinia": true,
"customRef": true,
"defineAsyncComponent": true,
"defineComponent": true,
"defineStore": true,
"effectScope": true,
"getActivePinia": true,
"getCurrentInstance": true,
"getCurrentScope": true,
"h": true,
"inject": true,
"isProxy": true,
"isReactive": true,
"isReadonly": true,
"isRef": true,
"mapActions": true,
"mapGetters": true,
"mapState": true,
"mapStores": true,
"mapWritableState": true,
"markRaw": true,
"nextTick": true,
"onActivated": true,
"onBeforeMount": true,
"onBeforeRouteLeave": true,
"onBeforeRouteUpdate": true,
"onBeforeUnmount": true,
"onBeforeUpdate": true,
"onDeactivated": true,
"onErrorCaptured": true,
"onMounted": true,
"onRenderTracked": true,
"onRenderTriggered": true,
"onScopeDispose": true,
"onServerPrefetch": true,
"onUnmounted": true,
"onUpdated": true,
"provide": true,
"reactive": true,
"readonly": true,
"ref": true,
"resolveComponent": true,
"setActivePinia": true,
"setMapStoreSuffix": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,
"storeToRefs": true,
"stores": true,
"toRaw": true,
"toRef": true,
"toRefs": true,
"toValue": true,
"triggerRef": true,
"unref": true,
"useAdminerStore": true,
"useAttrs": true,
"useAuthStore": true,
"useCssModule": true,
"useCssVars": true,
"useDictStore": true,
"useLink": true,
"useMenuStore": true,
"useNoticeStore": true,
"useRootStore": true,
"useRoute": true,
"useRouter": true,
"useSlots": true,
"useTabsStore": true,
"useThemeStore": true,
"useWebsocketStore": true,
"watch": true,
"watchEffect": true,
"watchPostEffect": true,
"watchSyncEffect": true
}
}