Element Plus 配置自动按需引入后,手动引入组件,组件样式丢失

作者在使用ElementPlus和Vite配置自动按需引入时遇到样式问题,发现手动引入组件样式与自动按需引入存在冲突。通过注释掉组件import,样式恢复但引起VSCode代码提示错误。为了解决这个问题,作者创建了一个ts文件作为中转,导出组件类型,实现了自动按需引入和手动引入的共存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因

最近在尝试使用 Element Plus 写一些简单的页面,跟着官方文档走配置了自动按需引入:

npm install -D unplugin-vue-components unplugin-auto-import
// vite.config.ts
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  // ...
  plugins: [
    // ...
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
})

官网文档链接

我使用到了一个 ElTree 组件,把官方实例代码拷过来后,怎么看都跟官网文档上的样式不一样。F12一看,对应的html标签里有类名,但是在style里面却找不到类名对应的样式。于是尝试手动引入组件样式

import 'element-plus/es/components/tree/style/css'

但是这样做却也是无济于事

在网上一顿搜索也没找到解决办法,甚至连样式丢失的原因也找不到,真是见鬼。

无意间的发现

偶然间,我把代码里面的一个import给注释掉了:

// import { ElTree } from "element-plus";

神奇的是样式居然恢复正常了,F12,style里面也能找到对应的样式了,我才意识到可能是配置自动按需引入后,再手动引入组件会导致冲突,看来自动按需引入插件还不够完善。

上面的手动引入是因为代码中要使用组件的模板引用,给ref做类型标注用的:

const treeRef = ref<InstanceType<typeof ElTree>>()

将上面的手动引入去掉后虽然丢失的样式回来了并且编译也不会报错,但是vscode老是标红,代码提示也没了,看着很难受。

解决办法

如果你不在意vscode报错,大可直接去掉手动组件import,可以正常编译运行。但是像我这样的强迫症患者实在没法接受。

为了使组件自动按需引入和手动引入共存,我想到了一个办法,使用一个ts文件作为中转,例如:

// types.ts
import { ElSelect, ElTree } from "element-plus";

export type ElTreeType = InstanceType<typeof ElTree>;
export type ElSelectType = InstanceType<typeof ElSelect>;

然后直接在.vue文件里面直接导入所需要的组件type即可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值