vscode-web-visual-editor 构建与发布完整指南:esbuild 打包、jsdom 补丁与本地调试
【免费下载链接】vscode-web-visual-editorEdit HTML files visually.项目地址: https://gitcode.com/gh_mirrors/vs/vscode-web-visual-editor
vscode-web-visual-editor(Web Visual Editor)是一款让你实时可视化编辑 HTML 文件的 VS Code 扩展。本文带你完整走一遍它的构建与发布流程:用esbuild把扩展打包成单文件、为什么要给jsdom打补丁、以及如何用 F5 快速完成本地调试,新手也能从零到发布。
1️⃣ 项目速览:它靠什么工作
打开任意.html文件,点击标题栏的"Visual Editor"图标即可进入可视化预览:
- 🖱️可视化编辑:在预览中选中、移动、删除元素;
- 🔗双向同步:选中代码会高亮预览中的元素,反之亦然;
- ✂️所见即所得:复制/剪切/粘贴操作会直接写回源文件。
扩展的核心依赖只有两个(见package.json的 dependencies):
| 依赖 | 作用 |
|---|---|
jsdom | 在 Node 端解析 HTML,建立"DOM 元素 ↔ 源码位置"的映射 |
he | HTML 实体转义与解码 |
⚠️ 环境要求:Node.js ≥ 25、VS Code ≥ 1.99(
package.json的engines字段)。
2️⃣ 安装依赖与第一次构建
npm install npm run compilecompile实际是三步组合:类型检查(tsc --noEmit)→ESLint 检查→esbuild 打包,最终输出单文件dist/extension.js(即package.json中声明的main入口)。
常用 npm 脚本一览:
| 脚本 | 用途 |
|---|---|
npm run compile | 一次性构建(开发用) |
npm run watch | 并行监听 esbuild + tsc,开发常驻 |
npm run package | 生产构建(压缩 + 无 sourcemap) |
npm run pretest | 测试前自动编译 + lint |
3️⃣ esbuild 打包要点:esbuild.js 里只有 3 个关键配置
esbuild.js全文不过几十行,核心就 3 处:
- CJS + Node 平台:
format: 'cjs'且platform: 'node',因为扩展运行在 VS Code 的 Node 宿主里; - 排除 vscode 模块:
external: ['vscode'],这个 API 由宿主运行时提供,绝不能打进包内; - 生产开关:加
--production时开启 minify 并去掉 sourcemap,开发模式则保留 sourcemap 方便断点调试。
文件里还有两个插件,各司其职:
esbuildProblemMatcherPlugin:把构建错误打印成 VS Code 问题匹配器能识别的格式,watch 模式下错误直接出现在"问题"面板;jsdomPatch:下一节的主角。
另外传入--watch时走ctx.watch()常驻进程,保存文件即自动增量重打包。
4️⃣ 为什么必须给 jsdom 打补丁
扩展在 Node 端用 jsdom 解析文档(src/visualEditor.ts中new JSDOM(code, { includeNodeLocations: true }))。includeNodeLocations让每个 DOM 节点都能对应回源码行号,这正是"预览选元素 ↔ 代码选位置"同步的核心。
但打包 jsdom 时,XMLHttpRequest-impl.js里有一行:
require.resolve("./xhr-sync-worker.js")问题在于:
require.resolve的相对路径在打包后已经失效,运行时会直接报错;- 而扩展根本用不到 jsdom 的同步 XHR 能力。
所以esbuild.js中的jsdomPatch插件用onLoad拦截该文件,把这一行替换成const syncWorkerFile = null;——一行"补丁",让整包可运行、零副作用。这是用 esbuild 打包带运行时require.resolve的依赖时的经典解法。
5️⃣ 本地调试:F5 一键打开扩展开发窗口
项目已预置.vscode/launch.json(Run Extension 配置):
- 按F5,
preLaunchTask会自动先执行compile; - VS Code 弹出一个新的扩展开发窗口;
- 新窗口把
dist/extension.js当作当前扩展加载,打开任意.html文件即可体验可视化编辑。
两个让调试更顺手的细节:
- 👀监听任务:
.vscode/tasks.json把watch设为默认构建任务,并行跑watch:esbuild+watch:tsc,保存即热更新; - 🔌推荐扩展:
.vscode/extensions.json建议安装 ESLint 与 esbuild-problem-matchers,装好后 esbuild 的报错会直接显示在"问题"面板,可点击跳转。
6️⃣ 打包与发布:vsce 两步走
package.json里的vscode:prepublish钩子会在发布前自动执行生产构建,所以只需:
npx @vscode/vsce package # 生成 .vsix 安装包 npx @vscode/vsce publish # 发布到市场.vscode/tasks.json中也预置了vsce package/vsce publish两个任务,可在终端面板直接调用。命令、图标、设置项(如webVisualEditor.allowScript)等package.json中的contributes声明会随包一起发布,无需额外配置。
7️⃣ 常见问题 FAQ
| 现象 | 排查建议 |
|---|---|
| watch 报错但"问题"面板无提示 | 安装.vscode/extensions.json推荐的 esbuild-problem-matchers 扩展 |
| 开发窗口里改动没生效 | 确认在 watch 模式下保存了文件,或重新 F5 |
| 提示 Node 引擎版本不满足 | 项目要求 Node ≥ 25,先升级 Node 再npm install |
掌握以上流程后,你就可以顺畅地开发、调试并持续发布这个 HTML 可视化编辑扩展了 🚀
【免费下载链接】vscode-web-visual-editorEdit HTML files visually.项目地址: https://gitcode.com/gh_mirrors/vs/vscode-web-visual-editor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考