当前位置: 首页 > news >正文

Copy as Markdown开发指南:从源码到浏览器扩展的完整流程

Copy as Markdown开发指南:从源码到浏览器扩展的完整流程

【免费下载链接】copy-as-markdownA browser extension to copy tabs and links as Markdown项目地址: https://gitcode.com/gh_mirrors/co/copy-as-markdown

Copy as Markdown是一款强大的浏览器扩展,能够帮助用户将标签页和链接以Markdown格式快速复制。本指南将带你了解从源码到浏览器扩展的完整开发流程,适合新手和普通用户学习如何构建和定制这款实用工具。

准备工作:开发环境搭建

在开始开发之前,需要确保你的环境满足以下要求:

  • Node.js >= 20
  • 通过npm install安装项目依赖
  • 全局安装web-ext工具:npm install -g web-ext(用于Firefox打包和调试)
  • Docker(运行完整的端到端测试套件时需要)

获取项目源码的方法非常简单,只需执行以下命令:

git clone https://gitcode.com/gh_mirrors/co/copy-as-markdown

项目结构解析:了解代码组织

Copy as Markdown的项目结构设计清晰,便于维护和扩展。核心目录结构如下:

src/ # 共享源代码 background.ts # MV3服务工作线程/Firefox事件页面入口 handlers/ # 消息/命令/上下文菜单处理器 services/ # 浏览器无关逻辑(+通过createBrowser*助手的浏览器适配器) ui/ # 弹出窗口/选项脚本 static/ # HTML页面和静态资源(原样复制) chrome/ # Chrome/Chromium目标 — manifest.json + dist/(已构建) firefox-mv3/ # Firefox MV3目标 — manifest.json + dist/(已构建) test/ e2e/ # Playwright端到端测试 ui/, lib/ # vitest浏览器测试(真实Chromium) **/*.test.ts # vitest单元测试(node)

这种结构将平台特定代码与共享代码分离,通过构建脚本将共享代码复制/捆绑到每个目标的dist/目录中,有效解决了浏览器兼容性问题。

核心功能开发:从服务到处理器

架构概览

项目采用了清晰的分层架构,主要包括以下几个部分:

  • 服务(Services):包含纯逻辑(链接/标签导出、选择转换)以及通过createBrowser*助手创建的轻量级浏览器适配器。浏览器依赖项被注入以方便测试。

  • 处理器(Handlers):编排用户入口点(上下文菜单、键盘命令、运行时消息)并委托给服务。

  • UIsrc/ui下的脚本驱动弹出窗口/选项页面;静态资源位于src/static

关键源代码文件

以下是一些核心功能的源代码文件,你可以通过阅读这些文件来深入了解项目实现:

  • 链接导出功能:services/link-export-service.ts
  • 标签导出功能:services/tab-export-service.ts
  • 选择转换功能:services/selection-converter-service.ts
  • 上下文菜单处理:handlers/context-menu-handler.ts
  • 键盘命令处理:handlers/keyboard-command-handler.ts

构建扩展:从源码到可安装文件

基本构建命令

使用以下命令可以构建扩展:

npm run build # 构建chrome/和firefox-mv3/ npm run build-chrome # 仅构建Chrome(+断言Turndown不存在于SW捆绑包中) npm run build-firefox-mv3 # 仅构建Firefox npm run package # 构建+压缩/web-ext构建商店制品到build/

构建过程由esbuild驱动,详细的构建机制可以参考docs/build.md。

开发调试

在开发过程中,你可以使用以下命令进行自动重载调试:

npm run debug-chrome # Chrome自动重载调试 npm run debug-firefox-mv3 # Firefox自动重载调试

如果需要手动加载扩展(无自动重载):

  • Chrome:扩展程序 → 加载已解压的扩展程序 → 选择chrome/目录。
  • Firefox:工具 → 附加组件 → 齿轮图标 → 调试附加组件 → 临时加载附加组件。

测试策略:确保扩展质量

单元测试和浏览器测试

项目使用vitest进行测试,分为两个项目:

  • unit(node环境,test/**/*.test.ts
  • browser(通过Playwright使用真实Chromium,test/ui/**test/lib/**

这些测试不会触及系统剪贴板,因此可以在任何地方运行,无需Docker。

npm test # 运行所有vitest项目一次 npm run test:watch # 监视模式 npm run test:ui # vitest UI npm run test:unit # 仅单元项目 npm run test:browser # 仅浏览器项目

端到端测试

扩展UI和剪贴板流程使用Playwright进行端到端测试。测试在有头模式下运行Chromium,使用持久配置文件(Chrome扩展所需)。

完整的端到端测试套件必须在Docker中运行:

npm run test:e2e:docker

这将运行docker/playwright-ci/docker-e2e.sh脚本,构建Docker镜像并在容器中运行测试套件。

对于Firefox,项目还提供了基于Python/pytest的端到端测试,通过Selenium驱动:

npm run test:e2e:selenium

打包与发布:分享你的扩展

Firefox扩展打包

要测试Firefox的重启行为(例如上下文菜单是否重新安装),你需要构建并侧载XPI文件。Firefox检查XPI签名,在发布版Firefox中无法禁用此功能,因此建议使用开发者版、Nightly或未品牌化的Beta版

  1. 执行npm run package-firefox-mv3,XPI文件将保存在./build/firefox-mv3中。
  2. 在Firefox开发者版中,打开about:config,将xpinstall.signatures.required设置为false,然后重启。
  3. 打开about:addons,将XPI拖放到页面上进行安装。
  4. 重启浏览器以验证重启行为。

扩展签名

要在发布版Firefox上侧载扩展,需要通过AMO签名:

  1. 从Firefox附加组件获取API密钥。
  2. bumpmanifest.json中的版本(AMO要求X.Y.Z,全部为数字,无前缀零)。
  3. 运行:
web-ext sign --channel=unlisted --api-key=... --api-secret=...

这将创建一个用你的AMO账户签名的XPI,并将其上传为未列出的扩展。

结语:开始你的扩展开发之旅

通过本指南,你已经了解了Copy as Markdown从源码到浏览器扩展的完整开发流程。这个项目不仅提供了实用的功能,还展示了现代浏览器扩展开发的最佳实践。无论你是想定制这个扩展,还是开发自己的浏览器工具,这些知识都将帮助你顺利开始。

如果你想进一步探索,可以查看项目中的fixtures/qa.html文件,它收集了各种边缘情况,有助于你更全面地测试扩展功能。祝你在浏览器扩展开发的道路上取得成功!

【免费下载链接】copy-as-markdownA browser extension to copy tabs and links as Markdown项目地址: https://gitcode.com/gh_mirrors/co/copy-as-markdown

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1374848/

相关文章:

  • Vue3 全栈原型上线:功能边界要怎么收
  • 大尺寸、高功率组件时代,EL检测技术如何升级?
  • 三节点AFC集群搭建操作指南
  • 终极指南:5分钟自动化部署macOS虚拟机,告别复杂配置烦恼 [特殊字符]
  • Krea 2 Identity Edit:终极指南:如何用AI LoRA模型实现专业级图像编辑
  • samba使用端口转发其他端口
  • 2026年手机上视频怎么转 GIF 实测可用的免费方法 - 图片处理研究员
  • 南京市玄武区OEM白标贴牌GEO服务商怎么选?2026年靠谱推荐与判断标准 - 科技快讯
  • JetBrains CC GUI插件:双AI引擎编程助手终极指南
  • 从最佳新人到百花影帝,易烊千玺步步深耕稳扎稳打
  • Node.js 高并发服务复盘:把临场处理变成默认规则
  • 如何快速部署Xash3D FWGS:面向开发者的完整实战指南
  • Vera1.1 全链路业务实战记录,聊聊 AI 视频生产整套链路落地的真实情况
  • 【声明】 请认准石家庄静源财务管理有限公司 **客服热线:18630144687 - 产品推荐官
  • 2026年珠海叉车出租服务商选择防坑全指南:德南吊装搬运深度解读 - 品牌报告
  • 如何免费解锁Wand完整功能:3分钟终极指南
  • 文献综述写到崩溃?5类AI工具深度横评:毕业之家、知网研学、万方到底怎么选?
  • MiniMax-H3 Turbo LoRA ComfyUI精简版实测:音视频同步生成终于不用折腾了
  • 杭州建德企业如何找到靠谱的OEM白标贴牌GEO服务商?2026年选型实战指南 - 科技快讯
  • KaTrain:如何用开源AI围棋训练工具提升你的棋力?
  • 弹性学制的全球EMBA,排名规则藏了哪些偏差
  • Hanselman.Forms单元测试策略:ViewModel与Service层测试实战
  • 5分钟快速上手:如何用FGO-py实现《命运/冠位指定》全自动刷本,解放双手养肝护发
  • OmniPost CLI 路径带空格怎么调用?Windows 正确写法
  • Motrix下载管理器性能调优实战指南:从基础配置到高级优化
  • 3步实现专业级AI语音克隆:RVC变声器快速入门指南
  • 什么是GEO优化?2026行业现状与服务商选型全解析 - 品牌测评鉴赏家
  • 贵州火锅牛羊肉吊龙肥牛雪花牛杂哪家专业?懂行的都来澳牧熙咨询批发 - 产品推荐官
  • 出海制造企业全球多云组网,四大基础技术能力标准拆解
  • 智慧景区管理系统:端边云架构与AI优化实践