ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

d2-admin 版本演进全解析:从 1.8.3 到 1.27.0 的架构变迁与技术实践

d2-admin 版本演进全解析:从 1.8.3 到 1.27.0 的架构变迁与技术实践 前端企业应用UI组件【免费下载链接】d2-adminAn elegant dashboard项目地址https://gitcode.com/gh_mirrors/d2/d2-admin点击查看免费下载d2-admin 是一个基于 Vue 2 Element UI 的中后台前端解决方案本文以其官方 CHANGELOG记录 2020-04 至 2023-09 期间 1.8.3 ~ 1.27.0 的全部变更为主线结合仓库源码逐条还原每个版本背后的实现动机包括 API 请求层与 Mock 方案的演进、d2-container 滚动组件的重构、菜单组件的 JSX 化、主题系统与搜索面板的升级、多页面构建与依赖治理等。读完本文你将掌握 d2-admin 各版本之间的差异脉络理解其核心模块请求层、容器组件、菜单、主题的底层实现并能在实际项目中定位与复用这些设计。一、版本演进总览一条主线三个周期从变更记录看d2-admin 的版本史可以大致划分为三个阶段阶段版本区间时间主题稳定性修补期1.8.3 ~ 1.10.02020-04 ~ 2020-04侧边栏菜单、多标签页、CDN 依赖的 Bug 修复新增 chester 主题架构重构期1.11.0 ~ 1.24.02020-05 ~ 2020-12请求层与 Mock 方案重构、容器组件 JSX 化、接口配置规范化、多页面构建维护收敛期1.24.1 ~ 1.27.02021-07 ~ 2023-09依赖升级、注销逻辑修复、CI 部署方式调整、文档与链接维护当前仓库 package.json 中version字段为1.27.0与 CHANGELOG 最新版本一致。值得注意的是1.9.0 在 2020-04-21 与 2020-04-22 各出现一次发布记录且条目内容相同属于同一版本重复发布阅读时不必视为两处独立变更。二、API 请求层演进从 Mockjs 到 axios 扩展2.1 1.11.0移除 mockjs改用 axios 扩展实现 Mock1.11.0 是请求层架构的分水岭该版本完成了几件大事移除mockjs及相关示例“使用 axios 扩展的方式实现 mock 数据”“优化接口配置设计注册的网络请求会自动注册到 vue 原型$api上”新增“全局错误捕捉”。这些改动在今天的源码中仍然完整可查。src/api/_service.js 中createService创建 axios 实例并注册请求/响应拦截器响应拦截器按“前后端约定的response.data.code”判断接口成败code 0时返回response.data.datacode 401抛出“请重新登录”其余 code 抛出带msg与 URL 的错误信息src/api/_service.js。Http 状态码则映射为 400/401/403/404/408/500/501/502/503/504/505 的中文提示src/api/_service.js错误会写入 Vuex 日志并弹出Message提示。Mock 的核心在于文件末尾src/api/_service.js// 用于真实网络请求的实例和请求方法 export const service createService() export const request createRequest(service) // 用于模拟网络请求的实例和请求方法 export const serviceForMock createService() export const requestForMock createRequest(serviceForMock) // 网络请求数据模拟工具 export const mock new Adapter(serviceForMock)mock是axios-mock-adapter的实例见 package.json 中axios-mock-adapter依赖挂在独立的serviceForMock实例上从而实现了“真实请求与模拟请求彻底分离”对应 1.12.0 的“分离用于真实网络请求和模拟请求的 service”。src/api/sys.user.js 给出了标准用法export function SYS_USER_LOGIN (data {}) { // 模拟数据 mock .onAny(/login) .reply(config { const user find(users, tools.parse(config.data)) return user ? tools.responseSuccess(assign({}, user, { token: faker.random.uuid() })) : tools.responseError({}, 账号或密码不正确) }) // 接口请求 return requestForMock({ url: /login, method: post, data }) }Mock 拦截器可用config读取请求参数并返回不同结果如 src/api/demo.js 中按config.params.id查表返回详情。响应包装工具集中在 src/api/_tools.js提供response/responseSuccess/responseError三个工厂函数统一输出{ code, msg, data }结构。2.2 1.20.0新增.api.js命名规则与请求前缀修复1.20.0 的变更值得单独说明“api 配置文件新增.api.js命名规则”——将接口配置从普通模块中区分出来便于构建工具按规则扫描与自动注册“修复请求缺少 /api 不走 fake 的问题”——保证只有命中约定的/api前缀的请求才走模拟数据避免真实请求被误拦截。2.3 1.21.0params 处理顺序调整与 lodash 模块化1.21.0 中“调整 createRequest 中 params 处理顺序”与“lodashtolodash-es”相互配合。当前 src/api/_service.js 的createRequest实现了对 GET 参数的处理当params非空时用qs.stringify(params, { allowDots: true, encode: false })拼接到 URL 上并清空params当以application/x-www-form-urlencoded发送时同样对data做序列化。这一“自动序列化参数”的设计1.21.0 注释为“request 现在会根据需要自动序列化参数”让调用方无需手工拼接查询串。请求默认携带Authorization来自 cookie 中的 token、baseURL: process.env.VUE_APP_API与 5000ms 超时src/api/_service.js。2.4 1.24.0更合理的 api 引入方式1.24.0 将“api 引入的方法更合理化”配合 1.19.0 的“在扫描 src/api/modules 下的接口配置时支持多级文件夹下的文件”形成了一套按目录约定自动收集接口并注册到$api的机制。从源码结构看src/api 目录同时存在_service.js基础设施、_tools.js工具函数与sys.user.js、demo.js等业务接口文件下划线前缀用于区分“基础设施”与“业务接口”。三、d2-container 与滚动方案better-scroll 的引入、配置化与最终退出3.1 1.15.0JSX 重写 d2-container 的 render1.15.0 使用 JSX 重写了d2-container的 render将多个布局变体统一为一套渲染逻辑为后续统一管理滚动容器打基础。3.2 1.19.0提供 better-scroll 配置项1.19.0 为d2-container提供betterScrollOptions配置项。当前实现位于 src/components/d2-container/components/mixins/bs.jsbsmixin 声明betterScrollOptionspropObject默认{}在mounted时以默认配置{ mouseWheel: true, click: true, scrollbar: { fade: true, interactive: false } }与外部传入的betterScrollOptions合并后初始化new BScroll(this.$refs.wrapper, ...)并监听scroll事件向外抛出自定义滚动事件坐标取反以符合常规认知this.BS new BScroll(this.$refs.wrapper, merge({ mouseWheel: true, click: true, scrollbar: { fade: true, interactive: false } }, this.betterScrollOptions)) this.BS.on(scroll, ({ x, y }) this.$emit(scroll, { x: -x, y: -y }))同时 mixin 提供scrollToTop()回顶与手动触发scroll事件的方法并在beforeDestroy时安全销毁实例src/components/d2-container/components/mixins/bs.js其中引用了 issue #75 关于销毁异常的处理。3.3 1.20.0移除不必要的 betterScrollOptions 声明1.20.0 移除了d2-container组件上“不必要声明”的betterScrollOptions避免 prop 冗余让配置统一收敛到bsmixin。3.4 1.21.0默认 layout 改用 Element 滚动条组件1.21.0 是滚动方案的转折点“默认 layout 使用处理过的 element 滚动条组件替代 better-scroll”。此后d2-container-card-bs/d2-container-full-bs等基于bsmixin 的变体见 src/components/d2-container/components/d2-container-card-bs.vue 与 src/components/d2-container/components/d2-container-full-bs.vue被降级为可选项默认布局转向 Element UI 自带的滚动条能力减少第三方依赖。从源码结构看src/components/d2-container/components 目录中同时保留d2-container-card-bs.vue、d2-container-full-bs.vue、d2-container-ghost-bs.vue等 bs 变体与不带 bs 的普通变体正是这一过渡期的直接产物。四、菜单与布局组件JSX 化与行为修复4.1 1.14.0menu-header 与 menu-side 使用 JSX 重写 render1.14.0 将menu-header与menu-side组件的 render 重写为 JSX与 d2-container 的 JSX 化1.15.0形成体系。对应源码在 src/layout/header-aside/components/menu-header/index.js 与 src/layout/header-aside/components/menu-side/index.js二者共用 src/layout/header-aside/components/mixin/menu.js 菜单逻辑与 src/layout/header-aside/components/libs/util.menu.js 菜单工具函数。4.2 侧边栏菜单的关键修复菜单行为在早期版本经历了密集修补1.8.3修复“侧边栏菜单自动展开失效”issue #258与“菜单自动折叠的 bug”issue #229性能优化上“直接使用$route.fullPath决定侧边栏菜单激活”避免依赖 path 匹配的间接计算1.9.1修复“增加侧边栏菜单折叠动画效果切换与设置”提交中遗留的问题1.9.0修复keepAliveRemove操作后不能恢复页面缓存的 bug 并同步修正相关 demo 页面。五、主题系统演进从单一主题到多主题注册主题能力是 d2-admin 的特色之一版本史上有两次关键投入1.10.0新增chester主题同时升级了 CDN 依赖版本1.11.0新增element主题**theme:** add element theme。从当前源码看src/assets/style/theme 目录下已沉淀了chester、d2、element、line、star、tomorrow-night-blue、violet共 7 套主题每套主题都包含index.scss主题样式与setting.scss主题设置项并通过 register.scss 与 theme.scss 统一注册主题切换的运行时逻辑在 src/store/modules/d2admin/modules/theme.js。配套的主题预览图与 Logo 位于 public/image/theme。1.9.0 的“更新色盘样式”与“增强 message 提示的配色对比”issue #243则是主题细节打磨的例证。六、搜索、Markdown 与富文本生态升级1.11.0 对内容生态依赖做了一轮整体升级并配套完善了页面搜索fuse.js从 3.6.1 升级到 5.2.3并“完善页面搜索相关代码”——对应 src/layout/header-aside/components/panel-search/index.vue 的面板搜索组件与 src/layout/header-aside/mixins/search.jsgithub-markdown-css3.0.1 → 4.0.0、highlight.js9.18.1 → 10.0.2、marked0.8.2 → 1.0.0三者构成 Markdown 渲染链路渲染组件见 src/components/d2-markdown/index.vue代码高亮见 src/components/d2-highlight/index.vue1.9.0 的“关闭搜索面板中列表容器的阴影”属于细节打磨。当前 package.json 中fuse.js已稳定在^5.2.3highlight.js为^10.7.3marked为^2.1.3。七、构建与依赖治理多页面构建、CDN 与 lodash 之争7.1 1.23.0多页面构建示例与打包分包优化1.23.0“提供多页面构建示例优化了打包分包取消 CDN 加载依赖但保留了设置入口”。当前仓库仍保留移动端入口public/mobile.html与src.mobile/目录含 src.mobile/main.js、src.mobile/router/index.js 等配合 vue.config.js 实现多页面输出。7.2 1.22.0 与 1.21.0lodash-es 的引入与回退依赖治理中有一处值得留意的反复1.21.0 将lodash改为lodash-es模块化打包更利于 tree-shaking但 1.22.0 又回退为lodash提交信息说明了原因——“lowdb 存在导致 lodash 无法移除”。最终 package.json 保留了lodash: ^4.17.21并在 src/api/_service.js 中以import { get, isEmpty, merge } from lodash按需引入。这一来回是真实的工程权衡当某个传递依赖无法消除 lodash 时切换 lodash-es 的收益会被抵消。7.3 1.25.0 与 1.26.0依赖收尾与 CI 变更1.25.0update packages minor/update packages patch整体更新依赖小版本1.26.0更新 badges、lock 文件、发送 Bark 消息并“不再使用 action 部署”说明部署从 GitHub Actions 迁出同时更新文档与链接地址。7.4 1.27.0CI 表达式调试1.27.02023-09-16是 CHANGELOG 记录的最新版本其 Features 全部是 CI 脚本调试痕迹${{ !contains(github.event.head_commit.message, [skip ci]) }}、contains、if、secrets.GITHUB_TOKEN属于 GitHub Actions 表达式调试对运行时功能无实质影响。当前 package.json 版本号即为 1.27.0。八、关键 Bug 修复盘点含源码佐证除上文已述的菜单与滚动问题外CHANGELOG 中还有一批值得复盘的修复版本修复内容关联模块1.8.4更新演示表格下载地址和下载方式issue #259表格导出依赖d2-projects/vue-table-export1.8.5修复多标签页拖拽排序后首页 tab 变为可关闭改用更合理的方法控制首页标签不可关闭src/layout/header-aside/components/tabs/index.vue1.9.2修复生产环境 CDN 未引用.min文件的问题CDN 依赖管理1.12.1修复静态资源请求错误issue #280构建输出1.14.0修复示例代码中错误的required属性清理 d2-count-up 组件错误代码与无用代码src/components/d2-count-up/index.vue1.16.0移除对 error 的无用判断错误处理链路1.18.0优化合并的代码完成刷新单页面功能页面刷新src/views/system/function/refresh/index.js1.20.1修复组件 mounted 钩子执行时页面可能已 onload 导致滚动校验不成功升级 d2-crud-plus 版本滚动容器生命周期1.24.1更新 sass 与相关 optionsSCSS 构建1.24.2merge替换Object.assign深合并避免覆盖通用工具1.24.3注销用户清空 vuex 用户信息失效移除从未使用的代码移除 simplemde用户状态src/store/modules/d2admin/modules/user.js九、版本验证与本地复现要验证某个版本的行为可直接在本地运行当前 1.27.0 版本# 安装依赖 npm install # 开发模式自动打开浏览器 npm run serve # 生产构建生成带打包报告 npm run build # 单元测试 npm run test:unit以上命令对应 package.json 中的 scriptsserve使用vue-cli-service serve --openbuild带--report生成 webpack 分析报告build:preview以--mode preview构建并调高 Node 内存上限NODE_OPTIONS--max_old_space_size4096。单元测试覆盖了 d2-container 全系变体、d2-count-up、d2-icon、d2-module-index-banner、d2-source 等组件见 tests/unit例如d2-container-card-bs.spec.js与d2-container-full-bs.spec.js可验证 better-scroll 变体的渲染行为。需要说明的适用前提当前仓库锁定 Vue 2.7 Element UI 2.15 技术栈package.jsonCHANGELOG 中描述的能力均针对这一技术栈验证若计划迁移到 Vue 3需将上述实现axios 拦截、Vuex 状态、容器组件整体迁移不能直接复用。结语d2-admin 的 CHANGELOG 记录了三年间一个中后台模板如何从“功能完整”走向“架构收敛”请求层从 mockjs 转向 axios-mock-adapter 并获得真实/模拟请求的彻底分离容器与菜单组件经 JSX 重写后趋于统一滚动方案在引入 better-scroll 并开放配置后最终让位于 Element 滚动条依赖治理则见证了 lodash-es 的引入与回退等真实权衡。对于开发者而言这份 CHANGELOG 与其对应的源码src/api/_service.js、src/components/d2-container、src/assets/style/theme共同构成了一份可逐版本对照学习的中后台工程演化样本。赞分享前端企业应用UI组件【免费下载链接】d2-adminAn elegant dashboard项目地址https://gitcode.com/gh_mirrors/d2/d2-admin点击查看免费下载相关推荐Qlib 版本演进全解析从 0.1.0 到 0.8.0 的架构变迁与技术脉络Qlib 版本演进全解析从 0.1.0 到 0.8.0 的架构变迁与技术脉络 Qlib 是一款面向 AI 量化研究的开源平台其核心代码自 0.1.0 起步金融科技人工智能机器学习数据分析强化学习Parcel 版本演进全解析从 1.0 到 2.16 的核心架构与技术变迁Parcel 版本演进全解析从 1.0 到 2.16 的核心架构与技术变迁 本篇文章以仓库根目录下的 CHANGELOG.md https://link.gi构建工具前端开发工具Editor.md 版本演进全解析从 v1.0 到 v1.5 的功能迭代与技术架构变迁Editor.md 版本演进全解析从 v1.0 到 v1.5 的功能迭代与技术架构变迁 导读 本文以 Editor.md 官方更新日志 CHANGE.md h前端UI组件富文本创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表