开发环境准备:加载第一个未打包扩展(开发者模式全流程)
写扩展不需要编译器、不需要 SDK,甚至不需要新建 git 仓库——一个文件夹加几个文本文件就是完整的工程。但有几个环境细节一开始没弄对,后面会浪费你大量时间。这篇把从零到「扩展跑起来」的全流程走一遍。
需要准备什么
| 项目 | 要求 | 说明 |
|---|---|---|
| 浏览器 | Chrome 88+ 或 Edge | MV3 核心特性需要 88 以上版本 |
| 编辑器 | 任意 | VS Code、HBuilderX、Sublime 均可 |
| 目录 | 一个纯英文路径的空文件夹 | 建议避免中文与空格,减少诡异问题 |
| 图标 | PNG 格式 16/48/128 像素 | 初期可省略,但上架必须有 |
浏览器版本在地址栏输入 chrome://version 查看。编辑器没有强制,团队协作或工程化建议直接用支持 JSON 校验的那款——manifest.json 里多一个逗号浏览器都会拒绝加载,编辑器的语法检查能救命。用 HBuilderX 做日常前端开发的话,可以直接把扩展目录当普通前端工程管理,技巧可参考 HBuilderX 效率技巧。
开发者模式:三步加载
扩展的「开发态」靠 chrome://extensions 页面支撑,流程如下:
- 地址栏输入
chrome://extensions回车,进入扩展管理页; - 打开右上角的「开发者模式」开关;
- 点击左上角「加载已解压的扩展程序」,选中你的工程文件夹。
成功后列表里会出现你的扩展卡片。此刻它已经完全可用:图标会出现在工具栏(可能被折叠进拼图菜单,可点图钉固定),所有声明的权限已生效。
用目录结构表示,一个最小工程长这样:
hello-ext/
├── manifest.json
├── background.js
└── icons/
├── icon-16.png
├── icon-48.png
└── icon-128.png
其中 manifest.json 是唯一的必需文件,哪怕只有三行也能加载:
{
"manifest_version": 3,
"name": "Hello Ext",
"version": "0.1"
}
改完代码怎么刷新
这是新手最常踩的坑:改了代码不等于生效了。扩展代码的刷新规则按上下文分三类:
| 改动位置 | 生效方式 |
|---|---|
| manifest.json | 必须在 chrome://extensions 点「重新加载」(循环箭头按钮) |
| Service Worker | 重新加载扩展,或在该卡片点「Service Worker」链接打开的 DevTools 里按 Ctrl+R |
| Content script | 重新加载扩展后,还要刷新目标网页 |
| popup / options 页 | 重新打开弹窗即可,部分情况也需重载扩展 |
养成肌肉记忆:改任何东西之前,先回到 chrome://extensions 点一下重新加载,再看页面效果。90% 的「我明明改了为什么没反应」都死在这一步。
调试入口在哪
每个上下文有独立的调试入口,找不到入口是第二个常见卡点:
- Service Worker:扩展卡片上点「Service Worker」链接,弹出专属 DevTools,console、断点、Network 一应俱全;
- Content script:在目标网页按 F12 打开 DevTools,切到 Sources 面板的 Content scripts 分组,或直接看 Console(注意页面自己的报错混在一起,需要过滤);
- popup:右键工具栏图标选「检查弹出内容」,或先点开弹窗再按 F12。
调试的完整技巧(含常见报错对照表)在第五章的 《调试技巧》 一篇专门展开,这里先记住入口位置。
开发态的边界
未打包加载的扩展只在本机本 Profile 生效,每次启动浏览器会弹「关闭开发者模式扩展」的提示,这属于正常现象。它不能分发给其他人,想给别人用就得走打包或上架流程,那是第五章的话题。
另外提醒一句:开发者模式里只加载你完全了解来源的代码。官方文档对未打包扩展的定位写得很清楚——仅用于开发过程中加载受信任的代码,见 https://developer.chrome.com/docs/extensions/how-to/distribute 。
环境就绪后,下一篇我们就正式动手,写第一个 Manifest V3 扩展。它功能极小,但五脏俱全:manifest、后台、图标一个不少。
多 Profile 与干净环境
扩展开发经常需要「干净」的浏览器环境验证问题:你装的十几个老扩展可能与新扩展冲突,登录态会干扰页面表现。官方解法是 Chrome 的用户 Profile(右上角头像 → 添加)。给扩展开发单开一个 Profile,里面不装任何其他扩展、不登录任何账号,调试结果才可信。发布前验证也应在干净 Profile 里走一遍完整安装流程。
此外记住两个常用地址:chrome://extensions 是扩展管理主页;chrome://extensions/shortcuts 是快捷键管理页(第四章 commands 一节会用到)。把 chrome://extensions 固定成书签,开发期间它的打开频率仅次于编辑器。
用开发者模式常见的三种「假故障」
加载失败或行为异常时,先排除这三种与环境相关的假故障:
- 扩展卡片变灰且提示出错:多半是 manifest JSON 语法问题,点「错误」按钮看具体原因——它会精确告诉你第几行出了什么问题,比想象中友好;
- 图标不见了:Chrome 会把新装扩展折叠进拼图菜单,点拼图图标找到它,点图钉固定到工具栏;
- 改动始终不生效:回到第二章讲过的刷新规则,按「改了什么」对号入座——manifest 改动必须重载扩展,content script 改动还要刷新目标页面。
第四种情况值得单独提:路径带中文或空格导致的诡异失败。Chrome 在 Windows 上对扩展目录路径里的非 ASCII 字符偶有兼容问题,症状是资源加载失败或打包异常。养成习惯:扩展工程一律放在纯英文、无空格的路径下,如 D:\dev\hello-ext。
版本与目标浏览器
写代码前确认两件事。第一,浏览器版本要够新:MV3 的关键 API 分版本陆续到位,比如 scripting 是 88+,tabGroups 是 89+,alarms 最小周期降到 30 秒是 120+。目标 API 的最低版本在官方 API 参考页的 Availability 一栏都标注着,用到新 API 时记得在 manifest 里配 minimum_chrome_version,防止旧版本浏览器装上后行为异常。第二,如果想兼顾 Edge,它在 edge://extensions 有几乎一样的开发者模式流程,MV3 代码通常无需改动即可加载,个别差异后面跨浏览器章节再谈。
团队协作的目录约定
如果扩展项目不止你一个人,一开始就定下目录约定能省很多摩擦:
project/
├── src/ # 源码:js、css、html
│ ├── background/
│ ├── content/
│ └── popup/
├── assets/ # 图标与静态资源
├── manifest.json # 建议由构建工具生成或校验
└── dist/ # 构建产物(加载/打包都用它)
加载已解压扩展时指向 dist 而不是 src,这样构建流程怎么变都不影响浏览器里的配置。图标统一放 assets 并在 manifest 里引用相对路径。manifest.json 是协作冲突的高发文件,多人项目建议用脚本生成或至少约定「谁改权限谁提交说明」。
环境检查清单
加载第一个扩展前,逐项确认:浏览器版本 ≥ 88;开发者模式已开启;扩展目录路径纯英文无空格;manifest.json 通过编辑器的 JSON 校验。四项全绿,下一篇的 Hello Ext 会非常顺利。
调试入口与报错对照在第五章 《调试技巧》 篇有完整展开,这里先记住入口位置。官方对应文档:https://developer.chrome.com/docs/extensions/get-started/tutorial/hello-world
另外提醒:扩展目录下的文件结构本身就是工程规范,多文件项目的管理技巧见 HBuilderX 效率技巧,跨编辑器通用。
本章由 WorkBuddy 原创整理,API 行为依据 Chrome 扩展官方文档(Manifest V3)。
