从 Element Plus 迁移

Element Plus 与 Uniboot UI 都是 Vue 3 组件库;Uniboot UI 由 Element Plus 衍生,组件 API、设计与 Element Plus 大体一致。从 Element Plus 迁到 Uniboot UI 时,主要是替换依赖与命名前缀element-plusuniboot-uiEl / el-U / u-)。

与之不同,Element Plus 官方「从 Element UI 迁移」面向的是旧版 Element UI(Vue 2) 迁到 Element Plus(Vue 3)。若你的项目仍停留在 Element UI,需要先完成那条路径里的 Vue 与组件库升级;若要把最终目标定为 Uniboot UI,可把文档中的「Element Plus」理解为「Uniboot UI」,并在完成后按本文「手动迁移」做一次包名与前缀替换。

仍在使用 Element UI / Element 2.x 时,也可参考讨论:从 Element 2.x 升级到 Vue 3 组件库

使用迁移工具

如果项目已经是 Vue 3 + Element Plus,推荐先使用 uniboot-migrate 做确定性替换,再按本文后续章节检查依赖、入口、类型与图标。

迁移工具会默认处理当前工作目录,因此请先进入待迁移的 Element Plus 项目根目录:

shell
cd your-element-plus-project

如果当前私服中的 create-uniboot 已包含 uniboot-migrate 命令,可直接通过 pnpm dlx 运行。

预览变更:

shell
pnpm dlx --package create-uniboot uniboot-migrate --dry-run

执行迁移:

shell
pnpm dlx --package create-uniboot uniboot-migrate --yes

检查残留:

shell
pnpm dlx --package create-uniboot uniboot-migrate --check

如果已经全局安装 create-uniboot,也可以直接运行:

shell
uniboot-migrate --dry-run
uniboot-migrate --yes
uniboot-migrate --check

注意

不要使用 create-uniboot migrate --dry-run 作为迁移命令。旧版本 create-uniboot 会把 migrate 当成项目名,从而创建一个名为 migrate 的新项目。

如果运行 uniboot-migrate 提示命令不存在,说明当前私服中的 create-uniboot 还没有发布迁移工具。请等待新版本发布,或临时使用本地脚本:

shell
node /path/to/uniboot-templates/packages/create-uniboot/bin/migrate.mjs --dry-run

迁移工具会自动处理:

  • package.json 中的 element-plus / @element-plus/icons-vue 依赖替换
  • element-plus 包名、样式入口与全局注册替换
  • ElementPlusResolverUnibootUIResolver,并改为从 uniboot-ui/resolver 引入
  • element-plus/globaluniboot-ui/global
  • 模板标签 <el-*> / </el-*><u-*> / </u-*>
  • 样式与 class 中的 .el-*el-*.u-*u-*
  • 常见服务 API:ElMessageElMessageBoxElLoadingElNotificationU*

迁移后建议执行:

shell
pnpm install
pnpm run type-check
pnpm run lint

注意事项

el-icon-* 字符串不会自动改为 u-icon-*,因为图标名称可能不是一一对应关系。请根据 --check 输出,结合 @uniboot/icons-vue 的实际图标名手工调整。

如果项目仍是 Vue 2 + Element UI,请先完成 Vue 3 迁移,再使用本工具做 Element Plus → Uniboot UI 的包名与前缀替换。

手动迁移

1. 依赖

卸载 element-plus(及若仅为其服务的 @element-plus/icons-vue 等),安装 uniboot-ui 与图标包(按需):

shell
pnpm remove element-plus @element-plus/icons-vue
pnpm add uniboot-ui @uniboot/icons-vue

版本与浏览器、Sass 等要求见 安装

2. 全局注册与样式入口

diff
- import ElementPlus from 'element-plus'
- import 'element-plus/dist/index.css'
+ import UnibootUI from 'uniboot-ui'
+ import 'uniboot-ui/dist/index.css'

- app.use(ElementPlus)
+ app.use(UnibootUI)

3. 组件与指令命名

模板中 标签名el-* 改为 u-*,脚本中 组件类名El* 改为 U*

Element Plus(示例)Uniboot UI
<el-button><u-button>
ElButtonUButton
ElMessage / ElMessageBoxUMessage / UMessageBox
ElLoading 等服务式 API对应 ULoading 等(见各组件文档)

按需解析时,将 ElementPlusResolver 换为 UnibootUIResolver,并从子路径 uniboot-ui/resolver 引入(与 published 包一致);配置项含 importStyledirectives 等与官方 ElementPlusResolver 类似。详细步骤见 快速开始

4. 类型与 IDE

使用 Volar 时,全局类型由:

diff
- "types": ["element-plus/global"]
+ "types": ["uniboot-ui/global"]

5. 图标

图标包使用 @uniboot/icons-vue;按需解析器中 UIcon* 会解析到该包(与 Element Plus 侧 ElIcon + @element-plus/icons-vue 对应)。

6. 样式与主题

主题变量、SCSS 覆盖方式与 Element Plus 相近,具体见 主题。若此前覆盖了 element-plus/theme-chalk,请改为指向本库发布的 theme-chalk 路径(以实际安装目录为准)。


从 Element UI(Vue 2)迁入

需要先完成 Vue 2 → Vue 3 以及 Element UI → Vue 3 组件库(Element Plus 或 Uniboot UI) 的升级;若中间经过 Element Plus,最后再按本文「手动迁移」迁到 Uniboot UI 即可。也可在安装 Vue 3 组件库时直接选用 Uniboot UI,省去二次替换。可配合社区工具做代码辅助转换:

工具产出仍可能需手工调整。若最终选用的是 Element Plus,之后若要换成 Uniboot UI,请再执行「手动迁移」中的依赖与 ElUel-u- 替换;若已直接接入 Uniboot UI,则只需保证迁移工具与手工修改都按 U / u- 命名即可。


使用 Vue 3 兼容构建(@vue/compat)时

在启用 Vue 3 Migration Build 的项目中,部分组件依赖 Vue 3 内部能力,可能与兼容层冲突。建议将 compatConfig 设为 MODE: 3(全局或在问题组件上),再逐步消除对兼容构建的依赖。详见官方 迁移构建说明