独立产品我用 Vue 3 + Dexie.js 花了三周时间,从零开发了一款Edge插件——剪贴板管理器

头像
小海波
46阅读0评论

你是不是也经常这样?

  • 在 VS Code 里写代码,需要反复敲同一个长命令,或者从浏览器文档里复制粘贴示例代码,切来切去烦得要死?
  • 作为软件工程 + AI 专业的学生,我每天要在终端、编辑器、笔记软件之间来回搬运代码片段、SQL 语句、API 参数,传统剪贴板只能记住最近一条,一不留神就覆盖了。
  • 好不容易攒了一堆常用代码,散落在各个聊天记录、备忘录里,想用的时候搜都搜不到。

为了根治这个痛点,我用 Vue 3 + Dexie.js 花了三周时间,从零开发了一款浏览器扩展形态的智能剪贴板管理器。它就像我的“代码第二大脑”,把所有常用的文本片段分门别类存好,随时搜索、一键复制,还能自动高亮语法。最重要的是——所有数据只存在本地,绝对隐私安全

🛠️ 功能简介

分类管理

  • 支持自定义分类,并为每个分类设置颜色标签
  • 分类名称超长自动省略,鼠标悬停显示完整名称
  • 分类、编辑、删除、重命名,操作灵活

强大的搜索与高亮

  • 全局模糊搜索,同时匹配标题和内容
  • 搜索结果中,关键词实时高亮显示,一眼定位

语法高亮

  • 自动识别 JavaScript、Python、Bash、SQL、JSON 等常用语言
  • 基于 highlight.js 实现,代码块更清晰可读

视图切换

  • 卡片视图 / 列表视图,一键切换,适应不同浏览习惯

数据备份与迁移

  • 一键导出所有数据为 JSON 文件
  • 导入时先预览内容,并智能计算变更:
    • 新增多少个分类
    • 新增多少条指令
    • 有多少同名条目会保留本地(避免覆盖)
  • 用户确认后才真正合并,安全感拉满

跨设备设置同步

  • 默认视图、主题模式等设置通过 chrome.storage.sync 自动同步到所有登录同一浏览器的设备

深色模式

  • 跟随系统或手动切换,保护眼睛

安全操作

  • 所有删除操作都有二次确认
  • 清空数据需要输入“确认清空”文字验证,防止手滑

快捷键

  • 支持 Ctrl+Shift+Y 快速打开扩展弹窗(Manifest V3 commands)

🧰 技术栈

  • 前端框架:Vue 3 + Composition API + Vite
  • UI 组件库:Element Plus(简洁美观)
  • 本地存储:Dexie.js 封装 IndexedDB(支持结构化查询,性能远超 localStorage)
  • 语法高亮:highlight.js(按需加载语言包,控制体积)
  • 浏览器扩展 API:Manifest V3 + chrome.storage.sync(设置同步)
  • 构建工具:Vite + @crxjs/vite-plugin(热更新开发体验极佳)

📁 项目结构

clipboard-manager/
├── public/ # 静态资源(图标等)
├── src/
│   ├── assets/  # 样式、图片
│   ├── components/  # Vue 组件(卡片、列表、弹窗等)
│   ├── db.js # Dexie 数据库初始化与操作
│   ├── App.vue # 主弹窗界面
│   ├── options.js  # 设置页面入口
│   └── background.js # 后台脚本(快捷键等)
├── dist/  # 打包后的扩展(可加载)
├── package.json
├── vite.config.js # Vite 配置(含 crxjs 插件)
└── README.md

📸 效果展示

  • 弹窗主界面:卡片视图下,每个片段带颜色分类标签,代码块语法高亮,底部有搜索框和视图切换按钮。
    Edge插件——剪贴板管理器
  • 设置页面:深色模式开关、默认视图选择,修改后立刻同步到其他设备。
    Edge插件——剪贴板管理器
  • 导入预览弹窗:上传 JSON 后,清晰列出“新增分类/指令”数量,以及“同名保留”的提示,确认按钮默认禁用,需勾选同意。
    Edge插件——剪贴板管理器
  • 删除确认:点击删除分类时弹出二次确认,清空全部数据需要输入文字验证。
    Edge插件——剪贴板管理器

Edge插件——剪贴板管理器

🚀 快速上手

  1. 从 GitHub 下载或克隆项目,执行 npm install 安装依赖。
  2. 运行 npm run build 生成 dist 文件夹。
  3. 打开 Edge 或 Chrome 浏览器的扩展管理页面(edge://extensionschrome://extensions)。
  4. 开启“开发人员模式”,点击“加载已解压的扩展”,选择 dist 文件夹。
  5. 点击浏览器工具栏的扩展图标,开始管理你的代码片段!

💡 开发经验与心得

1️⃣ 为什么放弃 localStorage,选择 IndexedDB + Dexie.js?

一开始为了简单,我用 localStorage 存数据。但很快发现两个问题:一是容量限制(通常 5-10MB),存不了多少条带格式的代码;二是查询功能太弱,无法实现“搜索内容中的关键词”。后来调研发现 IndexedDB 才是正道,但原生 API 用起来像受刑。直到遇到 Dexie.js,它提供了类似 MongoDB 的优雅查询语法,支持模糊搜索、分页、索引,而且完美配合 Vue 3 的响应式系统。真香!

2️⃣ 导入合并的“安全感”设计

数据备份功能很简单,但导入时如何让用户放心?我见过不少工具直接覆盖本地数据,导致用户丢失现有内容。我的做法是:

  • 解析上传的 JSON 后,不立即写入数据库,而是弹出预览对话框。
  • 计算三个关键数字:新增分类数新增指令数同名指令保留数(本地已有的同名条目不会被覆盖)。
  • 用户必须手动勾选“我已确认合并内容”,确认按钮才可用。
    这个设计上线后,身边的朋友都说“终于敢导入数据了”。多给用户一点控制权,信任感会翻倍。

3️⃣ 语法高亮:按需加载,性能与体积的平衡

highlight.js 支持 190+ 种语言,如果全量引入,扩展体积会暴涨。我的解决方案是在 db.js 里维护一个常用语言列表(JS、Python、Bash、SQL、JSON……),只在初始化时动态导入这些语言模块。代码大致如下:

import { ref } from 'vue'
import hljs from 'highlight.js/lib/core'
// 按需导入语言
import javascript from 'highlight.js/lib/languages/javascript'
import python from 'highlight.js/lib/languages/python'
// ... 注册
hljs.registerLanguage('javascript', javascript)

这样既保证了核心功能,又控制了打包体积。

4️⃣ Manifest V3 下的新挑战

迁移到 Manifest V3 后,后台脚本被 Service Worker 替代,无法长期保持状态。我的快捷键 Ctrl+Shift+Y 需要监听命令,但 Service Worker 会在几秒后休眠。解决办法是利用 chrome.storage 存储必要状态,并在命令触发时唤醒。另外,V3 要求所有外部资源必须在 permissionshost_permissions 中声明,还好我只用到 storageclipboardWrite,权限请求很干净。

5️⃣ 跨设备同步:chrome.storage.sync 真香

一开始我打算自己实现云同步,但涉及后端、加密、维护成本太高。后来发现 Chrome 内置的 chrome.storage.sync 正好适合同步设置类的小数据(最大 8KB 每项,总容量 100KB)。我把用户偏好(主题、默认视图)存在这里,只要用户登录了同一个 Chrome 账号,设置就会自动漫游。充分利用平台能力,事半功倍。

6️⃣ 细节体验:从“能用”到“好用”

  • 分类名称太长怎么办?用 CSS 截断 + title 属性显示完整名称。
  • 删除重要数据怕误操作?所有删除都弹二次确认,清空全部需要输入固定文字。
  • 操作后希望有反馈?每个异步动作都有 loading 状态和 Toast 提示。
    这些细节看起来微不足道,但累积起来就是用户愿意持续使用的理由。

🔒 隐私与安全说明

本扩展严格遵守 零云端存储 原则:

  • 所有你添加的代码片段、分类数据,仅保存在你电脑的 IndexedDB 本地数据库中,绝不发送到任何服务器
  • 仅申请两个必要权限:storage(用于同步设置)和 clipboardWrite(用于复制内容到剪贴板)。
  • 隐私声明已准备就绪,随时可以提交给 Edge/Chrome 应用商店审核。

📌 项目地址

GitHub: https://github.com/liguojing112/clipboard-manager
欢迎 Star、Fork、提 Issue 或 PR!如果你也有类似的效率工具想法,欢迎来交流。

💡 后续计划

  • [ ] 上架 Microsoft Edge Add-ons 和 Chrome 网上应用店(目前正在向微软申请),让更多人方便安装。
  • [ ] 增加“云同步”选项(端到端加密,作为可选的增值服务)。
  • [ ] 支持图片、文件等更多格式的剪贴板历史(可能会做成独立应用)。
  • [ ] 提供常用代码片段的模板库,一键导入(社区驱动)。

🤝 欢迎交流

我是软件工程 + AI 专业的一名学生,热爱捣鼓提升效率的工具。如果你也对开发者工具、本地优先应用感兴趣,欢迎在评论区留言或到 GitHub 上找我。希望这个小工具能帮你从重复劳动中解放出来,专注于真正有创造力的工作。

Happy coding! 🚀

收藏
举报
精选评论
empty
暂无数据
版块详情

独立产品

1k 帖子
3k 评论
616 关注
请真诚分享你的个人作品的创作灵感、开发经验、运营过程等;不得只罗列产品功能来借机营销
版主
远程老司机/游牧旅居中/电鸭社区站长
远程全职推荐

扫码下载应用

下载APP以便及时收到回复或进展