项目中自动引入神器 - unplugin-auto-import/unplugin-vue-components

前端 项目中 自动引入 神器

前言

在开发中,我们总喜欢站在巨人的肩膀上开发,比如用一些

框架:vue,react,

组件库:element,ant。

工具函数:axios,lodash

现在是模块化时代,我们也喜欢封装一些组件/工具库,但是都需要引入。v3更是改成composition API ,用那个引入那个,不知道你为此是否感到繁琐,今天就让我们来学习使用两款插件,解放双手,让我们有更多的摸鱼时间🦑

分类

以上的引入,总之分为两类,组件(自己封装的组件,三方组件) / 库,框架,工具方法 (vue,axios,或者自己封装的方法)

start(demo所用技术栈:vue3+vite+elementPlus+axios+lodash)

要新建一个 Vite + Vue 3 项目

  1. 安装 Vite:打开命令行工具(如终端或命令提示符),运行以下命令来全局安装 Vite:

npm install -g create-vite

  1. 创建 Vite + Vue 3 项目:在命令行中执行以下命令来创建一个新的 Vite + Vue 3 项目:

create-vite my-vue3-project

cd my-vue3-project

  1. 安装其他包

npm install axios lodash element-ui

  1. 启动开发服务器:进入项目目录后,运行以下命令启动 Vite 开发服务器:

npm run dev

主角 unplugin-auto-import( 自动导入API)

Install

arduino 复制代码
npm i -D unplugin-auto-import

Configuration

js 复制代码
// vite.config.ts
import AutoImport from 'unplugin-auto-import/vite'

export default defineConfig({
  plugins: [
    AutoImport({ /* options */ }),
  ],
})

options 里面可以添加一些配置

配置详解
  1. dirs: 目录下模块导出的自动导入。默认情况下,它只扫描目录下的一级模块,我们可以添加一些通配符来做筛选,限定到指定目录,或者到src 都可以做到自动引入,但是为了精确化查找,建议匹配越精准越好
js 复制代码
 // 配置本地目录 自动引入
  dirs: ['./src/utils/**', './src/stores/**'],
 //dirs: ['./src/**'],
  1. dts: 生成相应.d.ts文件的文件路径。默认为""/在本地安装"typescript"时自动导入.d.ts。
js 复制代码
 dts: './auto-imports.d.ts',

3. imports: 需要全局引入的

事例

without

js 复制代码
import { computed, ref } from 'vue'

const count = ref(0)
const doubled = computed(() => count.value * 2)

with

js 复制代码
const count = ref(0)
const doubled = computed(() => count.value * 2)

without

js 复制代码
import {f1} from '@/utils'
f1();

with

js 复制代码
f1();

without

js 复制代码
import {concat} from 'lodash';
console.log(concat([1, 2], [3]))

with

js 复制代码
console.log(concat([1, 2], [3]))

without

js 复制代码
import { useState } from 'react'

export function Counter() {
  const [count, setCount] = useState(0)
  return <div>{ count }</div>
}

with

js 复制代码
export function Counter() {
  const [count, setCount] = useState(0)
  return <div>{ count }</div>
}

主角 unplugin-vue-components( 自动导入组件)

Install

css 复制代码
npm i -D unplugin-vue-components

Configuration

这里我测试了一下,就算什么也不写,Components默认会自动引入 /src/components 下的文件

js 复制代码
// vite.config.ts
import Components from 'unplugin-vue-components/vite'

export default defineConfig({
  plugins: [
    Components({ /* options */ }),
  ],
})

你也可以再配置一些想自动引入的组件

dirs: ['./src/components', './src/index/components'],

如果害怕组件重名,可以加一个directoryAsNamespaces的选项,这样自动导入的组件名称 包含目录 ,就会防止命名冲突

options 里面可以添加一些配置

  • 三方组件,也可以在这里进行自动引入
js 复制代码
 import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
 
    Components({
      // vue-components 内置了前端主流的resolve element antd
      resolvers: [ElementPlusResolver()],
      dirs: ['src/components'],
      // 组件名称 包含目录 ,防止命名冲突
      directoryAsNamespaces: true,
    }),

事例

without

观测

  • 自动引入多了,就会分不清那个文件对哪些库/组件进行了引入,那这个时候需要一个插件帮我们看看引用关系

Install

css 复制代码
npm i -D vite-plugin-inspect

Since vite-plugin-inspect@v0.7.0, Vite v3.1 or above is required.

Add plugin to your vite.config.ts:

javascript 复制代码
// vite.config.ts
import Inspect from 'vite-plugin-inspect'

export default {
  plugins: [
    Inspect()
  ],
}

Then run npm run dev and visit localhost:5173/__inspect/ to inspect the modules.

学习链接

视频:

  1. www.bilibili.com/video/BV1ty...

  2. www.bilibili.com/video/BV19a...

  3. www.bilibili.com/video/BV1Sa...

文档:

  1. 自动引入分析插件 www.npmjs.com/package/vit...
  2. 自动引入api插件 www.npmjs.com/package/unp...
  3. 自动引入组件 www.npmjs.com/package/unp...

不止步于vite,其他构建工具的引入,可详看官网配置(详细看完官网,觉得这篇文写的挺水的🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣)

最后送上测试配置

js 复制代码
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import Inspect from 'vite-plugin-inspect';

export default defineConfig({
  plugins: [
    vue(),
    Inspect(),
    AutoImport({
      imports: [
        // auto-import 内置 vue vue-router react 常见基本库的引入规则
        //axios lodash
        'vue',
        'vue-router',
        'react'
        {
          lodash: [
            // import {concat} from 'lodash'
            'concat',
            // import {compact as cp} from 'lodash'
            ['compact', 'cp'],
          ],
          axios: [
            [
              // import axios from 'axios'
              // import {default as axios } from 'axios'
              'default',
              'axios',
            ],
          ],
        },
      ],
      // 配置本地目录 自动引入
      dirs: ['./src/**'],
      // dirs: ['./src/utils/**'],
    }),
    Components({
      // vue-components 内置了前端主流的resolve element antd
      resolvers: [ElementPlusResolver()],
      // dirs: ['./src/components'], // 默认
      dirs: ['src/components'],
      // 组件名称 包含目录 ,防止命名冲突
      directoryAsNamespaces: true,
      // dirs: ['./src/components', './src/index/components'],
    }),
  ],
  // 以src 为根路径配置 @
  resolve: {
    alias: {
      '@': '/src',
    },
  },
});
相关推荐
橙子家1 小时前
浏览器缓存之【身份与会话管理】:Cookies 和 Private state tokens
前端
最新资讯动态2 小时前
HDC 2026 | 对话鲸鸿动能:存量时代,品牌如何夺回营销“主动权”?
前端
最新资讯动态2 小时前
游戏出海,从产品走向体系
前端
最新资讯动态2 小时前
20人团队跑出百万DAU、大厂也来抢量:谁在鸿蒙生态跑出加速度
前端
最新资讯动态2 小时前
千万开发者背后,鸿蒙商业化的B面
前端
爱勇宝4 小时前
AI 时代:智商决定起点,情商决定走多远
前端·ai编程
kyriewen4 小时前
用了半年 Claude Code 后,我尝试关掉它写了一周代码——结果比想象中严重
前端·javascript·ai编程
IT_陈寒5 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
徐小夕6 小时前
万字拆解 JitWord:企业级实时协同文档底层架构 + 大模型 AI 融合完整实践
前端·vue.js·github
一份执念6 小时前
uni-app 小程序分包限制处理与主包体积优化实战
前端·微信小程序