项目中自动引入神器 - 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',
    },
  },
});
相关推荐
CL_IN1 小时前
企业数据集成:实现高效调拨出库自动化
java·前端·自动化
浪九天2 小时前
Vue 不同大版本与 Node.js 版本匹配的详细参数
前端·vue.js·node.js
qianmoQ3 小时前
第五章:工程化实践 - 第三节 - Tailwind CSS 大型项目最佳实践
前端·css
椰果uu3 小时前
前端八股万文总结——JS+ES6
前端·javascript·es6
微wx笑3 小时前
chrome扩展程序如何实现国际化
前端·chrome
~废弃回忆 �༄3 小时前
CSS中伪类选择器
前端·javascript·css·css中伪类选择器
CUIYD_19893 小时前
Chrome 浏览器(版本号49之后)‌解决跨域问题
前端·chrome
IT、木易3 小时前
跟着AI学vue第五章
前端·javascript·vue.js
薛定谔的猫-菜鸟程序员4 小时前
Vue 2全屏滚动动画实战:结合fullpage-vue与animate.css打造炫酷H5页面
前端·css·vue.js
春天姐姐4 小时前
vue3项目开发总结
前端·vue.js·git