Skip to content

v3.0.0

Choose a tag to compare

@wenjianzhang wenjianzhang released this 11 Aug 17:11
· 303 commits to master since this release
51a7fe4

距上一个版本 v2.0.9(2022-02)历时三年半,累计 163 个提交。本次为技术栈整体升级,包含大量破坏性变更,升级前请务必阅读文末的迁移说明。

💥 破坏性变更

项目 变更前 变更后
框架 Vue 2.6 Vue 3.4
UI 组件库 Element UI 2.15 Element Plus 2.8
路由 vue-router 3.4 vue-router 4.4
状态管理 vuex 3.5 vuex 4.1
构建工具 Vue CLI 5(webpack) Vite 8
Node 版本 >= 8.9 >= 22(推荐 v24 LTS)
包管理器 npm pnpm
图表库 ECharts 4.8 ECharts 6.1

基于本项目二次开发的页面需按 Vue 3 迁移指南Element Plus 迁移文档 适配。

✨ Vue 3 迁移

全量清理 Vue 2 写法,无残留:$set/$delete$listeners.sync.nativebeforeDestroy/destroyed::v-deep、全局 filtersfunctional 组件、router-linktag 属性。为 13 个组件补充 emits 声明,15 个组件改为 multi-word 命名。

⚡ 构建工具迁移至 Vite

指标 webpack Vite
生产构建 ~11 s 7 s
dev server 启动 10–30 s ~0.5 s
  • require.context 迁移为 import.meta.glob(含动态路由索引)
  • SCSS 变量经 .module.scss 转发供 JS 读取
  • svg 雪碧图由 vite-plugin-svg-icons 生成,symbolId 规则不变
  • gzip 压缩与 element-plus 分包策略与原 webpack 配置保持一致

🐛 重要缺陷修复

操作按钮权限控制失效v-permisactionv-permission 指令仍使用 Vue 2 的 inserted 钩子,而 Vue 3 已重命名为 mounted,导致指令完全不执行——无权限的操作按钮不会被隐藏(全项目 58 处使用)。后端 Casbin 校验始终有效,不构成越权,但前端权限展示失真。已按官方映射迁移全部指令钩子,并补充单元测试防止回归。

parseTime 运行时崩溃:函数在 const time_str 声明之前访问该变量,构成暂时性死区,导致全局方法 $parseTime 每次调用均抛出 ReferenceError

代码生成页编辑器无法渲染:沿用 vue-codemirror 5 的小写 codemirror 导出,而依赖的 v6 仅导出 Codemirror,组件实际为 undefined

ImageCropper 直接修改 prop:在 data() 中对 imgFormat 赋值,Vue 3 下无效且触发告警。

🔒 安全

Dependabot 告警由 88 条降至 26 条,其中运行时依赖仅剩 4 条(xlsx,官方无修复版本,且其唯一触发入口 XLSX.read 已随未注册的 Excel 导入页一并移除)。

  • axios 1.16.1 → 1.19.0(修复 10 条告警)
  • js-cookie → 3.0.8
  • 移除零引用却引入 critical 漏洞的 jsonlint(underscore 1.6.0)与 webpack-bundle-analyzer(ejs 2.7.4)
  • .npmrc 中已停止解析的 npm.taobao.org 更换为 registry.npmmirror.com

🧹 工程化

  • 单元测试从完全无法运行修复至 29 个全部通过:jest 配置的 transform 仍指向 Vue 2 的 vue-jest,且 jest 27 起默认环境由 jsdom 改为 node
  • 新增基于 Playwright 的 E2E 测试
  • husky 升级至 9(4.x 在 pnpm 环境下会调用已废弃的 pnpx,导致任何贡献者都无法提交)
  • 移除 21 个未使用或失效的依赖,依赖总数由 81 降至 60
  • CI 全部 action 固定至完整 commit SHA,Node 矩阵改为 22.x / 24.x
  • Dockerfile 改用 pnpm,基础镜像切换为官方 node:24-alpinenginx:stable-alpine

📖 升级说明

  1. Node 需 v22 以上,推荐 v24 LTS(v18、v20 均已 EOL)
  2. 改用 pnpmnpm install -g pnpm && pnpm install
  3. 自定义组件若使用 $listeners.nativefilters 等特性需自行适配
  4. 自定义指令须将 bind/inserted/update/unbind 更名为 beforeMount/mounted/updated/unmounted,否则将静默失效
  5. 构建命令不变(pnpm build:prod),底层已换为 Vite