vue2实现组件库的自动按需引入,unplugin-auto-import,unplugin-vue-components

1.使用ant-design-vue或者element-ui时,如何每个组件都去import导入组件,大大降低了开发效率,如果全局一次性注册会增加项目体积,那么如何实现既不局部引入,也不全局注册?

2.在element-plus官网看到有说明

3.那么在webpack中也是可以使用的,下载unplugin-auto-import,unplugin-vue-components两款插件

pnpm install -D unplugin-auto-import unplugin-vue-components

4.在vue.config.js中配置

const AutoImport = require('unplugin-auto-import/webpack')
const Components = require('unplugin-vue-components/webpack')
const { AntDesignVueResolver } = require('unplugin-vue-components/resolvers');



AutoImport({
      imports: ['vue', 'vue-router'],
      resolvers: [AntDesignVueResolver()],
    }),
    Components({
      resolvers: [AntDesignVueResolver()],
    }),

5.在项目中使用

<template>
  <div id="app">
    <!-- <router-view></router-view> -->
    <a-button>按钮</a-button>
    <a-divider />
  </div>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

6.发现报错:AutoImport is not a function,打印AutoImport发现是个对象,AutoImport.defalut才是函数,更改下vue.config.js配置

AutoImport.defalut({
      imports: ['vue', 'vue-router'],
      resolvers: [AntDesignVueResolver()],
    }),
    Components.defalut({
      resolvers: [AntDesignVueResolver()],
    }),

7.运行项目还是报错
Module build failed (from ./node_modules/.pnpm/unplugin@2.2.0/node_modules/unplugin/dist/webpack/loaders/transform.js): Error [ERR_REQUIRE_ESM]: require() of ES Module

发现插件用的是es语法,而我们用的是commonjs语法,如何解决?降低插件版本
 

"unplugin-auto-import": "0.16.0",
    "unplugin-vue-components": "0.22.0",

8.运行之后发现没报错了,完美解决

9.经过测试,发现在使用a-layout、a-layout-sider组件时,报错:ant-design-vue并没有抛出a-layout-sider,控制台也输出了全部抛出的组件,发现并没有抛出a-lay-sider,包括a-layout-header、a-layout-content、a-layout-footer,去node_modules下查看a-design-vue源码,发现只抛出了a-layout组件,其他四个是通过vue.component全局注册的,所以ant-design-vue不适合用unplugin-auto-import,换成element-ui试下,测试el-menu、el-sub-menu、el-menu-item是否会出现同样的问题呢?

10.经过测试element-ui不会报错,查看源码发现element-ui抛出了所有的组件,比如el-menu、el-menu-item、el-sub-menu,所以想要使用unplugin-auto-import只能使用element-ui。

Vue.js项目中,`npm i -D unplugin-vue-components unplugin-auto-import` 是用来安装两个插件命令的命令行操作。`unplugin-vue-components` 和 `unplugin-auto-import` 是Unplugin家族的一部分,Unplugin是一个旨在简化Vue.js配置的工具。 - `npm i -D` 是一个全局安装命令,`-D` 表示以开发依赖(devDependencies)的形式安装。这样做的好处是可以确保这些依赖只在开发环境中使用,不会打包到生产环境。 - `unplugin-vue-components` 是用于自动化管理Vue组件导入的插件,它可以帮助你从大型组件库中按引入组件,减少不必要的打包体积。 - `unplugin-auto-import` 则是自动导入所的外部依赖,比如CSS文件和TypeScript声明文件。 以下是安装过程的演示: ```sh # 在终端中,进入你的Vue.js项目目录 cd my-vue-project # 使用npm或yarn安装 npm install -D unplugin-vue-components unplugin-auto-import # 或者 yarn add -D unplugin-vue-components unplugin-auto-import # 如果是Unplugin CLI,还要先全局安装 npm install -g @vue/cli-plugin-unplugin # 或者 yarn global add @vue/cli-plugin-unplugin # 接下来,在项目的根目录下创建一个配置文件,如.config/unplugin.js (如果不存在) # 内容可能类似于: // unplugin相关配置 module.exports = { plugins: [ { plugin: '@unplugin/vuex', options: {} }, { plugin: '@unplugin/router', options: {} }, { plugin: 'unplugin-vue-components', options: { componentsDir: 'src/components' } }, { plugin: 'unplugin-auto-import', options: { css: true, dts: true } } ] } # 然后运行 vue.config.js 或者 @vue/cli-service.config.js 的更新命令,让配置生效 vue.config.update() # 或者 npm run build --update ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值