108 lines
5.2 KiB
Typst
108 lines
5.2 KiB
Typst
|
||
// Imports
|
||
#import "@preview/brilliant-cv:2.0.5": cvEntry, cvSection
|
||
#let metadata = toml("../metadata.toml")
|
||
#let cvSection = cvSection.with(metadata: metadata)
|
||
#let cvEntry = cvEntry.with(metadata: metadata)
|
||
|
||
|
||
#cvSection("项目经历")
|
||
|
||
#cvEntry(
|
||
title: [AI 赋能的前端开发工具],
|
||
society: [GuiiAI Devtools],
|
||
date: [2024.8 - 2025.1],
|
||
location: [杭州],
|
||
tags: ("Unplugin", "Vue", "Monorepo", "TypeScript", "Vite"),
|
||
description: "",
|
||
)
|
||
|
||
作为 Vite Devtools 安装到任意现有项目,不依赖编辑器、IDE
|
||
|
||
- *[项目架构]* GuiiAI Devtools 分为多个包。主要组成部分为:Vite Plugin Server、悬浮球叠加层、操作面板。Vite Server 提供修改代码文件、获取源码的能力,悬浮球叠加层和操作面板可以让用户发出 Prompt。
|
||
|
||
|
||
- *[项目基建]* GuiiAI Devtools 的仓库是一个大的 Monorepo,分为多个包发布。最开始使用 Vercel 的 ai-sdk 作为 AI 库,但由于其自定义能力不够,我们自己封装了 neuri 库作为替代
|
||
|
||
- *[编译时 DOM 注入]* 通过 Vite Plugin 的能力,将一个悬浮球注入到用户 Dev 模式的网页,作为用户控制 AI 写代码的操作中心。注入的元素使用另一个 Vue 实例,因此不要求用户使用 Vue 开发。
|
||
|
||
- *[UI 样式隔离]* 为避免用户页面的全局样式污染悬浮球和面板,我们使用 shadow-dom 隔离了悬浮球和主页面的样式,避免了样式污染,主面板使用 Iframe,隔绝上下文。
|
||
|
||
- *[Vite 到浏览器的 RPC 通信]* 为保证 Vite Plugin Server 和 前端的双向通信,我封装了一个简易的 RPC 库。浏览器不同上下文之间使用 BroadcastChannel 通信,浏览器与 Vite Plugin Server 复用 dev ws 相互通信。
|
||
|
||
- *[自定义接入模型]* Devtools 支持自定义 OpenAI API Endpoint。
|
||
|
||
- *[优化打包体积]* 通过动态导入代码编辑器的 highlight.js,将打包体积从 2M 降低至 300k
|
||
|
||
|
||
|
||
|
||
#cvEntry(
|
||
title: "一个资源分享站",
|
||
society: "NuistShare",
|
||
location: "南京",
|
||
tags: ("Nuxt", "NestJs", "Prisma", "TypeScript", "S3", "AList", "Github OAuth"),
|
||
description: "",
|
||
date: "2023.7-2023.9",
|
||
)
|
||
|
||
一个使用 Nuxt3、NestJs 开发的学习资料共享
|
||
|
||
- *[打包体积优化]* 优化字体以及部分样式进行懒加载,部分组件使用动态导入加载,将首屏需要加载的资源从 2M 优化到240k,大大缩短首屏加载时间。
|
||
|
||
- *[中文字体分块优化]* 使用开源项目中文网字计划对字体分包,导出为分片 woff 并在 CDN 处设置强缓存。解决字体过大加载缓慢 的问题。
|
||
|
||
- *[Prerender 支持]* 使用 Nuxt 3 的能力,提前预渲染主页样式,缩短首屏加载时间
|
||
|
||
- *[CDN 集成部署优化]* 利用 vite-plugin-qiniu, 将 assets 上传至 CDN 并配置强缓存
|
||
|
||
- *[S3、AList 多存储协议支持]* 通过抓包并分析 Alist,支持了 Alist 协议,并且支持了 S3 协议。
|
||
|
||
- *[Github OAuth、邮箱验证支持]* 通过 node-mail 库支持了发送邮件,支持了 Github OAuth 登录。
|
||
|
||
- *[响应式UI设计]* 使用了 Vue 3 的 Composition API 进行开发,使用了 Vue 3 的 Suspense 特性, 实现了响应式 UI 设计。
|
||
|
||
#cvEntry(
|
||
title: "麦趣测评小游戏",
|
||
society: "麦趣职前教育小游戏",
|
||
tags: ("Uniapp", "Vue2", "Vue3", "TypeScript"),
|
||
description: "",
|
||
location: "南京",
|
||
date: "2022.7-2022.9",
|
||
)
|
||
|
||
该项目是一个游戏化测评类软件,内含大量游戏关卡,用于素质测评、品牌营销等。包含了大量的响应式适配、 动画、事件触发。使用 Uniapp 开发微信小程序、微信 H5 应用。管理平台为用户定制游戏化测评应用的管理平台。
|
||
|
||
技术栈:用户端 Uniapp、Vue2 | 平台端 Vue3、TypeScript、Pinia、Echarts、文件约定式路由
|
||
|
||
- *[报告图生成]* 在产品的不同时期采用 Canvas 绘制 HTML2CANVAS 的方案动态生成报告图用于用户保存和 分享。
|
||
|
||
- *[微信接入]* 负责完成小程序、H5 应用的 微信登录、支付的接入。
|
||
|
||
- *[组件封装]* 主导组件化工作,负责计时器、判题弹窗、关卡流程控制等游戏通用组件开发,提供给其他成员使用,编写了详 细的组件文档。
|
||
|
||
- *[响应式界面]* 设计响应式系统,基于媒体查询设计响应式断点规则,为多种窗口尺寸进行了响应式适配。对 IOS 微信下方导 航栏进行特殊处理。
|
||
|
||
- *[构建流水线与管理工作]* 使用了 Github Actions 进行自动化构建与部署,推送到相关云服务。负责内部测试、研发 外包的发布、对接工作。
|
||
|
||
#pagebreak()
|
||
|
||
|
||
#cvEntry(
|
||
title: "基于 React native 开发的米家空调插件,基于 Spec 协议",
|
||
society: "米家空调插件",
|
||
tags: ("React Native", "Redux", "Spec Protocol", "i18n", "RTL"),
|
||
date: "2025.4-2025.8",
|
||
location: "南京",
|
||
description: "",
|
||
)
|
||
|
||
- *[项目架构]* 项目采用 React Native 开发,使用 Spec 协议与米家 APP 进行通信。
|
||
|
||
- *[国际化支持]* 使用自封装库完成国际化支持,支持多语言切换。
|
||
|
||
- *[RTL 支持]* 支持了 RTL 布局,支持从右向左的布局。通过对 Victory Chart 等组件库的再封装,实现了图标等组件的 RTL 布局的支持。
|
||
|
||
- *[状态管理]* 使用 Redux 的修改版 Rematch 进行状态管理,自动订阅服务端 Spec 变更
|
||
|