程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Vue2

  • Vue3

  • vue3 + TS 项目集成

    • 集成element-plus
    • 项目配置 src 别名
    • 项目配置环境变量
    • 项目集成 SVG 图标
    • 项目集成 SASS(SCSS)
    • 项目集成 Mock 数据
    • 项目集成axios二次封装
    • 项目集成 vite调试工具
    • 项目集成自动注册组件
    • 项目集成自动导入 API
      • 1. 为什么使用 `unplugin-auto-import`?
      • 2. 安装 `unplugin-auto-import`
      • 3. 在 `vite.config.ts` 配置插件
      • 4. 配置成功后代码使用
        • 📌 1. 不用再手动 `import`
        • 📌 2. `vue-router` 直接使用 `useRouter()`
        • 📌 3. `Pinia` 直接使用 `defineStore()`
      • 5. 自动生成 TypeScript 类型
      • 6. 解决常见问题
        • 🔹 问题 1:自动导入的 API 没生效
        • 🔹 问题 2:TypeScript 仍然报 `Cannot find name 'xxx'`
        • 🔹 问题 3:ESLint 报 `no-undef`
  • Vue全家桶
  • vue3 + TS 项目集成
scholar
2025-04-30
目录

项目集成自动导入 API

# 项目集成自动导入 API

在 Vue3 开发过程中,我们经常需要手动导入 ref、computed、watch 等 Vue API,同时 vue-router 的 useRouter()、useRoute() 以及 Pinia 的 defineStore() 也需要手动 import,例如:

import { ref, computed } from 'vue';
import { useRouter, useRoute } from 'vue-router';
import { defineStore } from 'pinia';
1
2
3

在多个文件中反复导入这些 API 非常繁琐,同时如果某些 import 遗漏,会导致 TS 报错。

为了解决这个问题,我们可以使用 unplugin-auto-import 自动导入 Vue、Vue Router、Pinia 的 API,这样我们在代码中就可以直接使用这些 API,而不需要手动导入,提高开发效率!


# 1. 为什么使用 unplugin-auto-import?

  • ✅ 无需手动 import Vue、Vue Router、Pinia 的 API,减少代码冗余。
  • ✅ TypeScript 友好,自动生成类型声明文件,避免 TS 报错。
  • ✅ 支持 ESLint 规则,保证代码风格一致,不影响静态检查。
  • ✅ 可扩展性强,可以配置自动导入 VueUse、Axios 等工具库的 API。

# 2. 安装 unplugin-auto-import

使用 pnpm 安装:

pnpm install -D unplugin-auto-import
1

或者使用 npm / yarn:

npm install -D unplugin-auto-import
# 或
yarn add -D unplugin-auto-import
1
2
3

# 3. 在 vite.config.ts 配置插件

安装完成后,需要在 vite.config.ts 启用 unplugin-auto-import,让其自动导入 Vue、Vue Router、Pinia 的 API。

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

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      imports: ['vue', 'vue-router', 'pinia'], // 自动导入 Vue & Vue Router & Pinia API
      dts: 'src/auto-imports.d.ts', // 生成全局类型声明,支持 TypeScript
      eslintrc: {
        enabled: true, // 生成 `.eslintrc-auto-import.json`,自动配置 ESLint
      },
    }),
  ],
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

📌 配置解析

  • imports: ['vue', 'vue-router', 'pinia'] 👉 自动导入 ref、computed、useRouter()、defineStore() 等 API。
  • dts: 'src/auto-imports.d.ts' 👉 自动生成 TypeScript 类型声明,避免 TS 报 Cannot find name 'ref'。
  • eslintrc.enabled: true 👉 自动配置 ESLint,避免 ESLint 报 no-undef 错误。

# 4. 配置成功后代码使用

# 📌 1. 不用再手动 import

有了 unplugin-auto-import,我们可以直接使用 Vue API,而不需要手动 import:

<script setup lang="ts">
const count = ref(0);
const double = computed(() => count.value * 2);
</script>
1
2
3
4

而不需要:

<script setup lang="ts">
import { ref, computed } from 'vue';

const count = ref(0);
const double = computed(() => count.value * 2);
</script>
1
2
3
4
5
6

✅ ref 和 computed 会被自动导入,不需要 import!


# 📌 2. vue-router 直接使用 useRouter()

如果项目中使用 vue-router,我们可以直接使用 useRouter(),而不需要手动导入:

<script setup lang="ts">
const router = useRouter();

const goHome = () => {
  router.push('/');
};
</script>
1
2
3
4
5
6
7

📌 无需 import { useRouter } from 'vue-router',插件会自动导入!


# 📌 3. Pinia 直接使用 defineStore()

如果项目中使用了 Pinia,我们可以直接使用 defineStore() 创建状态管理:

export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0,
  }),
  actions: {
    increment() {
      this.count++;
    },
  },
});
1
2
3
4
5
6
7
8
9
10

📌 无需 import { defineStore } from 'pinia',插件会自动导入!


# 5. 自动生成 TypeScript 类型

如果你的项目是 Vue3 + TypeScript,unplugin-auto-import 会自动生成全局类型声明,避免 TS 报错。

📌 自动生成 src/auto-imports.d.ts

// 这个文件是自动生成的,避免手动 import
declare global {
  const ref: typeof import('vue')['ref'];
  const computed: typeof import('vue')['computed'];
  const watch: typeof import('vue')['watch'];
  const useRouter: typeof import('vue-router')['useRouter'];
  const defineStore: typeof import('pinia')['defineStore'];
}
export {};
1
2
3
4
5
6
7
8
9

📌 这样,TS 就不会报 Cannot find name 'ref' 之类的错误!


# 6. 解决常见问题

# 🔹 问题 1:自动导入的 API 没生效

✅ 解决方案:

  • 确保 vite.config.ts 已正确配置:

    AutoImport({
      imports: ['vue', 'vue-router', 'pinia'],
      dts: 'src/auto-imports.d.ts',
    });
    
    1
    2
    3
    4
  • 重启 Vite 服务器 让插件生效:

    pnpm run dev
    
    1

# 🔹 问题 2:TypeScript 仍然报 Cannot find name 'xxx'

✅ 解决方案:

  • 确保 dts 已正确配置,并且 src/auto-imports.d.ts 存在:

    dts: 'src/auto-imports.d.ts',
    
    1
  • 手动删除 src/auto-imports.d.ts,然后重启 Vite 服务器:

    rm src/auto-imports.d.ts
    pnpm run dev
    
    1
    2

# 🔹 问题 3:ESLint 报 no-undef

✅ 解决方案:

  • 确保 eslintrc.enabled: true 已开启:

    AutoImport({
      eslintrc: {
        enabled: true,
      },
    });
    
    1
    2
    3
    4
    5
  • 运行 pnpm run dev 让插件自动生成 .eslintrc-auto-import.json,然后在 .eslintrc.js 中引用它:

    module.exports = {
      extends: ['./.eslintrc-auto-import.json'],
    };
    
    1
    2
    3
编辑此页 (opens new window)
项目集成自动注册组件

← 项目集成自动注册组件

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式