news 2026/8/25 8:17:35

three-devtools 源码开发指南:从本地调试到 Chrome 网上应用店发布的完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
three-devtools 源码开发指南:从本地调试到 Chrome 网上应用店发布的完整教程

three-devtools 源码开发指南:从本地调试到 Chrome 网上应用店发布的完整教程

【免费下载链接】three-devtoolsthree.js devtools项目地址: https://gitcode.com/gh_mirrors/th/three-devtools

three-devtools是一款面向 three.js 的浏览器开发者工具扩展(three.js devtools),能在 DevTools 中可视化检查 3D 场景、渲染器、材质与纹理,并支持直接修改参数。本文是一份从零开始的源码开发指南,带你完成环境搭建、本地调试、构建打包,最终把扩展发布到 Chrome 网上应用店(Chrome Web Store)与 Firefox 附加组件商店的完整流程。

🧭 先认识项目:它是什么

three-devtools 以"面板(Panel)"的形式嵌入浏览器开发者工具中。打开一个运行 three.js 应用的页面后,你可以在three标签页里:

  • 🌐 浏览场景对象树(Scene Graph)
  • 🎨 查看并实时修改材质、几何体参数
  • 🖼️ 预览纹理(漫反射、法线、粗糙度等 PBR 贴图)
  • ⚙️ 调整渲染器与相机参数

下面的示例场景就来自项目自带的演示页,打开开发者工具即可用 three-devtools 检查其中的网格、材质与纹理:

项目官方说明文档:DEVELOPMENT.md、README.md

🚀 一键安装:克隆仓库并安装依赖

只需 3 条命令即可开始:

git clone https://gitcode.com/gh_mirrors/th/three-devtools cd three-devtools npm install

依赖项定义在 package.json 中,核心依赖包括lit-element(Web Components UI 框架)、three0.137.0(内置一份私有的 three.js 用于注入可视化)、webextension-polyfill(统一 Chrome/Firefox 扩展 API)。

🔍 本地调试:最快上手方法

Chrome:以"已解压扩展"方式加载

  1. 打开chrome://extensions,开启右上角"开发者模式"
  2. 点击加载已解压的扩展,选择项目根目录
  3. 出现一条关于browser_specific_settings的警告属正常现象,可忽略(这是 Firefox 专用的 manifest.json 字段)
  4. 访问任意 three.js 页面(可运行自带示例 examples/objects.html),打开开发者工具即可看到three面板

Firefox:用 web-ext 自动调试

npx web-ext run

web-ext会启动一个带扩展的 Firefox 实例,改完 src/app/ 的界面代码后刷新面板即可看到效果。

⚡ 调试刷新规则(重要)

修改的文件需要做什么
src/app/(面板 UI)刷新 DevTools 面板即可
src/content/(注入脚本)chrome://extensions重新加载扩展 + 刷新页面
src/extension/(通信管道)重新加载扩展 + 刷新页面

📂 目录结构:源码都藏在哪儿

src/ ├── app/ # DevTools 面板前端(Web Components + LitElement) ├── extension/ # 通信管道:content script / background / devtools 三端脚本 └── content/ # 注入到用户页面上下文、直接接触 three.js 实例的脚本 web_modules/ # 预构建的依赖模块(由 @pika/web 生成) examples/ # 自带演示场景 scripts/ # 构建与发版脚本

关键文件速查:

  • 面板入口:src/app/index.html 与 src/app/index.js(注册所有自定义元素)
  • 根状态元素:src/app/elements/AppElement.js,负责整个应用状态与重渲染
  • 注入侧单例:src/content/ThreeDevTools.js(observe / select / update 等核心 API)
  • 通信三端:src/extension/contentScript.js → src/extension/background.js → src/extension/devtools.js
  • 数据序列化:src/content/toJSON.js(把 three.js 对象转成面板可渲染的数据)

🔄 理解数据流:消息如何跨越 4 个上下文

这是理解源码最关键的一张"心智地图"。three.js 场景数据必须穿越4 个上下文

  1. 注入脚本(src/content/,运行在页面用户上下文,能摸到 three.js 对象)
  2. Content Script(src/extension/contentScript.js,通过postMessage中转)
  3. Background(src/extension/background.js,按tabId把消息转发给对应面板)
  4. DevTools 面板(src/app/,前端应用渲染)

反方向(面板 → 页面)走得更直接:面板通过chrome.devtools.inspectedWindow.eval()直接在用户上下文执行命令,例如选中某个对象、修改某个数值。之所以要设计这么"绕",是因为纹理等大数据(base64 字符串)走 eval 轮询会严重卡顿,只能走 port 消息通道。

页面接入也很简单,three.js 应用只需注册场景与渲染器:

if (typeof __THREE_DEVTOOLS__ !== 'undefined') { __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', { detail: scene })); __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', { detail: renderer })); }

📦 构建打包:3 个 npm 脚本要分清

构建命令定义在 package.json 的 scripts 中,实际逻辑在 scripts/build-dist.sh:

命令用途
npm run build:deps用 @pika/web 重新生成 web_modules/(升级依赖后才需要)
npm run build:dist打包通用 zip(Firefox/非 Chrome 浏览器)
npm run build:dist:chrome打包 Chrome 专用 zip(自动移除browser_specific_settings字段)
npm run build:source打包未构建的源码zip,供 AMO 源码审查使用

💡 为什么 Chrome 要单独构建?因为 Chrome 不认识 manifest 里的browser_specific_settings键,脚本会先删掉该字段再打包,消除警告。

🏷️ 版本号管理:一条命令同步所有文件

npm version patch # 或 minor / major

这条命令会同时更新 package.json 与 manifest.json 中的版本号(由 scripts/version.js 完成),并自动打 git tag、推送到远端。发布前务必先执行这一步。

🌍 发布到 Chrome 网上应用店(Chrome Web Store)

完整发布流程:

  1. 双端自测npx web-ext run测 Firefox;chrome://extensions加载已解压测 Chrome
  2. 提升版本号npm version minor
  3. Chrome 专用构建npm run build:dist:chrome,产物在dist/目录
  4. 上传:登录 Chrome 开发者后台(Chrome Developer Dashboard),找到 Three.js Developer Tools 条目,点击编辑,上传dist/three.js_developer_tools_*.zip
  5. 等待审核:由于扩展申请了http://*/*https://*/*等宽泛权限,审核时间会稍长,接受审核提示即可

🔥 顺便发布到 Firefox AMO

  1. npm run build:dist生成主构建,npm run build:source生成源码包
  2. 登录 AMO 开发者后台,上传dist/three.js_developer_tools_*.zip
  3. 因使用 @pika/web 打包了依赖,按 AMO 源码提交政策还需上传dist/three-devtools-source.zip

🧰 新手常见坑位清单

  • 改完 src/content 没效果?这类脚本是注入到用户上下文的,必须重载扩展并刷新页面
  • 注入方式为什么"奇怪"?Content Script 拿不到页面 JS 全局变量,所以 contentScript.js 会动态插入<script>同步注入window.__THREE_DEVTOOLS__,让页面代码尽早可注册
  • 依赖变了要重新 build:deps 吗?要。web_modules/ 是预构建产物,package.json依赖更新后执行npm run build:deps重新生成
  • 想跑示例场景?项目自带 examples/ 下的多个演示页(scenes.html、materials.html、large-data.html 等),npm run serve后浏览器打开即可

✅ 小结

  • 三步起步:克隆 →npm installchrome://extensions加载已解压
  • 数据流记住"4 上下文":注入 → content script → background → 面板
  • 发布前必做:双端自测 +npm version+build:dist:chrome
  • Chrome 上传 zip 到开发者后台即可,Firefox 另需提交源码包

掌握这条从本地调试到 Chrome 网上应用店发布的完整链路,你就能独立迭代 three-devtools 这个 three.js 3D 开发工具了。祝开发顺利!🚀

【免费下载链接】three-devtoolsthree.js devtools项目地址: https://gitcode.com/gh_mirrors/th/three-devtools

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 8:16:40

CompletableFuture.allOf 正确用法与避坑指南

1. 为什么 allOf 是 CompletableFuture 里最常被误用、也最容易出问题的组合器&#xff1f;CompletableFuture 的 allOf 方法&#xff0c;是 Java 异步编程中一个看似简单、实则暗藏陷阱的核心工具。它出现在几乎所有中高级 Java 面试题里——“如何等待多个异步任务全部完成&a…

作者头像 李华
网站建设 2026/8/25 8:11:54

SOS DP:从子集求和到位运算优化的核心算法

1. 从“子集求和”到SOS DP&#xff1a;一个被低估的利器“SOS DP”&#xff0c;第一次听到这个名字&#xff0c;你可能和我当初一样&#xff0c;觉得它神秘又高级。它的全称是“Sum Over Subsets Dynamic Programming”&#xff0c;翻译过来就是“子集和动态规划”。别被这个名…

作者头像 李华
网站建设 2026/8/25 8:10:28

【AIoT】智能硬件GPIO通信详解(一)

GPIO 通信概述 通用输入输出(GPIO)接口是嵌入式系统中最基础也最常用的硬件接口:它以最简单的高低电平信号,在 MCU、工控机与外部设备之间传递数字信息。相比 I2C、SPI 等总线协议,GPIO 没有复杂的时序与协议开销,却足以承担传感器采集、执行器驱动、中断触发等核心任务…

作者头像 李华
网站建设 2026/8/25 8:08:01

C#启动外部进程与参数传递:ProcessStartInfo实战指南

1. 项目概述&#xff1a;从命令行到程序间通信的桥梁在C#开发中&#xff0c;尤其是开发桌面应用、工具软件或者系统集成项目时&#xff0c;一个非常高频且基础的需求就是&#xff1a;让我们的主程序去启动另一个独立的可执行文件&#xff08;exe&#xff09;&#xff0c;并且还…

作者头像 李华
网站建设 2026/8/25 8:05:58

C#字典底层原理:哈希函数、冲突解决与性能优化实战

1. 字典是什么&#xff0c;以及为什么我们需要关心它的“肚子”里有什么做C#开发&#xff0c;字典&#xff08;Dictionary<TKey, TValue>&#xff09;大概是除了数组和列表之外&#xff0c;我们最常用的数据结构了。但凡需要根据一个键&#xff08;Key&#xff09;快速找…

作者头像 李华
网站建设 2026/8/25 8:05:50

贪吃蛇项目实战:从入门到全栈与AI的工程化进阶指南

1. 从“玩具”到“工程”&#xff1a;贪吃蛇项目的实战价值再认识 提到贪吃蛇&#xff0c;很多人第一反应是诺基亚手机上的经典像素游戏&#xff0c;或者大学C语言课程的第一个大作业。它似乎太“简单”了&#xff0c;简单到很多人觉得它只是一个编程入门练手的小玩意儿&#x…

作者头像 李华