FocusENG
FocusENG 是一个以 Markdown 为核心的 VS Code 英语学习扩展。它把阅读、查词、词库维护、复习、背诵、翻译、音视频精听、X、知乎和 Wikipedia 内容阅读放进同一个工作区,让学习资料保持为可搜索、可编辑、可版本管理的普通文件。
扩展内置英语词典,并允许通过工作区中的 Markdown 和 JSON 文件持续补充个人学习数据。基础的词库、悬停释义、本地复习和 Wikipedia 阅读器不依赖账号;翻译、数据同步、远程面板和 X 阅读器需要配置相应的 API 或账号凭据。
功能概览
Markdown 词库
- 扫描
Words 目录和 Review.md,建立当前工作区的已学单词索引。
- 在 Markdown、JSON、JSONC、TXT 和 SRT 中悬停英文单词,显示音标、词性、释义、词形、关联词、短语、备注、例句、词根词缀、相似词、图片和外部链接。
- 按
F5 或执行 FocusENG: F5 显示当前单词悬停,显示当前光标所在单词的悬停内容;已收录到个人词库时保留触发单词本身,未收录时显示默认提示“床前明月光”。
- 从悬停内容或快捷键跳转到单词在
Words、Review.md、课程和词根词缀文件中的位置。
- 保存
Words 中的 Markdown 或 config 中的 JSON 文件后,自动刷新相关数据。
- 在 Markdown 中输入英文或中文后加
/,获得单词、关联词、短语、词形、相似词和词根词缀建议。
- 为
Words 和 Test 文件提供日期标题、单词条目和代码块的行内补全。
复习与背诵
- 通过右键菜单把当前单词或其关联主词加入
Todo.md。
- 从
Todo.md 的待复习代码块生成并打乱 Review.md。
- 统计
Test 目录中代码块内单词的复习次数。
- 在
Test 文档中进行逐词背诵,显示完成进度,并可联动 Word 和 Audio 面板。
- 使用
Check 高亮当前 Markdown 中尚未收录到个人词库的单词。
- 扫描工作区中的
Write.md,把二级标题和其后的代码块内容作为默写素材,并在 Markdown 中通过 w-标题 触发行内默写提示。
翻译与发音
- 使用百度翻译 API 翻译选中的英文文本。
- 开启行内翻译后,在当前英文行末显示中文翻译。
- 使用有道词典音频播放英音或美音。
- 状态栏显示当前行或选中文本中的英文单词数量。
音视频与字幕
- 提供 Word、Audio、Video 和 Tool 四个 VS Code Panel 视图。
- 支持本地文件和 HTTP(S) 音视频地址;本地资源默认从
assets/audios 和 assets/videos 读取。
- 在包含时间轴的 Markdown 中提供定位、单次播放、循环播放、片段起止和隐藏台词等 CodeLens 操作。
- 可合并选中的连续字幕块,并统一字幕文本标点。
- 在 Markdown 视频链接上右键,可直接使用
在Panel中打开 播放常见视频格式。
xReader
- 从 X GraphQL 接口读取
For You、Following、推文详情、回复和指定作者的推文。
- 使用只读
et-for-me-x: Markdown 文档展示正文、媒体、引用、互动数据和时间。
- 在推文标题上通过 CodeLens 继续打开详情和回复。
- 在 Activity Bar 中浏览关注作者,支持搜索、清空搜索、A-Z/Z-A 排序、刷新、置顶和查看作者推文。
- 置顶作者顺序通过 VS Code Settings Sync 同步。
Wikipedia 阅读器
- 匿名搜索简体中文或英文 Wikipedia,不需要 Wikipedia 账号、Cookie 或 API Token。
- 支持关键词和
zh.wikipedia.org、en.wikipedia.org 文章链接。
- 将正文清理并转换为带简体中文主标题和连续序号的只读 Markdown,保留章节、列表、正文图片/表格和链接文字,不展示超链接、条目元信息、引用附录等其它信息。
- 在独立 Activity Bar 中切换语言、重新执行最近 50 条搜索,以及删除或清空搜索记录。
- 搜索历史在本机持久化,并可通过 VS Code Settings Sync 同步。
知乎阅读器
- 从知乎网页接口读取“推荐”“关注”和搜索结果中的回答、专栏文章摘要。
- 使用只读
et-for-me-zhihu: Markdown 文档展示标题和摘要;作者、互动数据和“查看原文”链接会在标题行收起显示。
- 通过时间线标题上方的 CodeLens,或直接粘贴具体回答、专栏文章链接,打开完整 Markdown 正文;原文入口和 xReader 的“查看原推”一样只在标题行显示链接文字。
- 完整正文保留标题、段落、列表、引用、代码、表格、HTTPS 图片和一页根评论,不包含点赞等写操作。
可选远端能力
- 上传 Dictionary、Article、已背单词、文件关联词和提示图片。
- 从服务端同步待复习单词。
- 在配置的 Web 页面中打开 Pair 练习。
- 通过 Socket.IO 与外部音视频页面联动。
环境要求
- VS Code
1.92.0 或更高版本。
- 使用词库和复习功能时,需要打开一个文件夹或工作区,扩展以第一个工作区目录作为学习资料根目录。
- 百度翻译、X、知乎、Wikipedia、远端上传和 Pair 页面需要网络;Wikipedia 只需要可访问公开站点,不需要账号配置。
Ctrl+R 的虚拟桌面切换是 Windows 专用能力,需要可用的 VirtualDesktopAccessor.dll;不使用该功能时可以忽略。
快速开始
1. 准备学习工作区
最小可用结构如下:
english-workspace/
├── Words/
│ └── 2.10.md
├── Test/
├── config/
├── Todo.md
└── Write.md
在 Todo.md 中创建 Review 标题和紧随其后的代码块:
# Todo
## Review
```
abandon ability account
```
Review.md 不需要预先创建,初始化或生成复习内容时会自动创建。
2. 添加第一个单词文件
Words 中的文件使用 Markdown 有序列表。扩展识别包含 **[音标]** 的列表项,并读取反引号中的词性和下方代码块中的英文例句。
# 2.10
1. abandon **[əˈbændən]** `v` 放弃;抛弃 `n` 放任
```
They had to abandon the plan.
```
2. ability **[əˈbɪləti]** `n` 能力;才能
格式约定:
- 单词写在
**[音标]** 前面。
- 词性使用反引号,例如
n、v、adj。
- 不同释义使用中文或英文分号分隔,同一释义中的并列内容使用逗号分隔。
- 例句放在对应列表项的缩进代码块中。
- 文件名使用
月.日.md(例如 2.10.md)时,空文件首行可自动补全标题。
3. 初始化并开始阅读
- 打开上述工作区。
- 点击状态栏中的
FocusENG。扩展激活时也会自动执行一次初始化。
- 在 Markdown、TXT、JSON 或 SRT 中把鼠标移到英文单词上查看释义。
- 点击状态栏中的悬停模式名称,选择本次重点显示的内容。
- 点击
Check,高亮当前 Markdown 中尚未掌握的单词。
典型使用示例
收集并生成复习内容
- 在 Markdown 的某个单词上右键,选择
Add,单词会加入 Todo.md 的 ## Review 代码块。
- 选择
Add Correlation 可加入该单词的关联主词。
- 打开
Todo.md,点击 ## Review 上方的 Generate。
- 扩展去重并打乱待复习单词,然后把已存在于
Words 的完整条目写入 Review.md。
- 在
Review.md 的 # Review 标题上点击 Shuffle 可再次打乱顺序。
Todo.md 上方的 Sync 会从配置的远端服务拉取复习列表,使用前需要设置 ETFORME.uploadHost。
使用输入补全
在 Markdown 中输入内容后加 /:
abandon/
放弃/
- 英文输入会匹配内置词典、个人词库以及当前单词的关联词、短语、词形和相似词。
- 中文输入会按释义反查英文单词。
- 选中补全项后会插入单词,并按当前英音/美音设置播放发音。
在 Words 文件中先输入序号和单词,再输入空格,可以补全完整条目模板:
3. improve
翻译文本
先在 VS Code 用户设置中配置百度翻译:
{
"ETFORME.baiduApiKeys": [
{
"appid": "your-appid",
"secret": "your-secret",
"remark": "default",
"enable": true
}
]
}
配置后可以:
- 选中 Markdown 文本,右键选择
Translate。
- 按
Ctrl+E(macOS 为 Cmd+E)开启或关闭行内翻译;开启后移动光标即可翻译当前英文行。
背诵练习
扩展会读取 Test 目录和当前打开的 Words、Review.md。建议把 Test 文件与目标单词文件并排打开,在 Test 文件中输入:
d abandon ability account
d 开头表示背诵输入,行尾会显示已完成数量和总数。
- 使用
da 开头时,命中单词会播放发音。
- 在原有规则末尾添加
n+正整数,可以指定本轮从第几个单词开始。例如 dn10 从第 10 个单词开始,dan5 从第 5 个单词开始并保留发音,d1n6 从第 6 个单词开始并保留 d1 分组规则。到达最后一个单词后会继续从第 1 个单词背诵,因此总数和原单词列表一致;只有 dn 而没有数字时不应用此规则。
- 行尾输入英文句点
. 时,Word 面板会显示下一个待背单词。
- Test 文件代码块中出现的单词会计入复习次数,并可在“复习次数”悬停模式中查看。
Write.md 默写
在工作区任意位置创建 Write.md,扩展会自动解析所有二级标题和其后紧邻的代码块内容。代码块为空时会跳过;保存或修改 Write.md 后,默写素材会立即同步到扩展状态中。
# Write
## abc
```
Shine bright like a diamond
You and I, you and I, we're like diamonds in the sky
```
在 Write.md 中输入 ## 后,按 Tab 可通过行内补全生成完整片段,标题使用自动生成的 UUID,光标会停在代码块内部:
## 1468cd7e-6a4d-4543-8409-628a23392b10
```
```
在其它 Markdown 中输入 w-abc 即可匹配 Write.md 中的 ## abc 内容,并使用行内补全提示接下来要默写的文本。w-标题 和标题匹配不区分大小写;默写内容比较也不区分大小写。写错时,错误字符会以 #fa8c16 字体颜色标记,但行内补全仍会继续提示后续内容。
也可以把 w-abc 放在代码块前,光标进入代码块后继续触发默写提示:
w-abc
```
Shine bright
```
如果素材来自字幕或带编号段落,扩展会只提取正文。下面的内容会解析为两段 Shine bright like a diamond:
## lyric
```sql
1. 00:00:00,960 --> 00:00:05,980
Shine bright like a diamond
2. 00:00:05,980 --> 00:00:08,610
Shine bright like a diamond
```
下面这种段落编号也会被移除,只保留段落正文:
## article
```text
1. Over the past century, a powerful idea has taken root in the educational landscape.
2. 'Growth mindset theory' is a relatively new version of this idea.
```
为 Markdown 配置音视频
Markdown 文件可以包含 Config 标题和一个 json 或 jsonc 代码块。配置使用 JSON5 解析,因此 jsonc 示例中的注释和尾逗号有效。
# Song Demo
## Config
```jsonc
{
"fileId": "song-demo",
"timeOffset": 0,
"audios": [
{
"id": "audio-1",
"title": "Track 1",
"url": "demo.mp3",
"extend": {},
},
],
"videos": [],
"articles": [],
}
```
# Track 1
1. 00:00:01,000 --> 00:00:03,000
Hello, welcome to FocusENG.
2. 00:00:03,000 --> 00:00:05,000
Let us begin.
把 demo.mp3 放在工作区的 assets/audios 中。文件名包含 Song 或 IELTS 时,时间轴上会出现 Audio Panel 的定位、单次播放、循环播放和片段操作。
视频配置使用相同结构:
{
"fileId": "subtitle-demo",
"timeOffset": 0,
"audios": [],
"videos": [
{
"id": "video-1",
"title": "Demo",
"url": "demo.mp4",
},
],
"articles": [],
}
本地 demo.mp4 放在 assets/videos 中。文件名包含 Subtitle 时,扩展会为视频时间轴提供 CodeLens 操作。Markdown 中的远程或本地视频链接也可右键选择 在Panel中打开;支持 m3u8、m4v、mov、mp4、mpeg、mpg、ogv 和 webm。
阅读 X 内容
xReader 直接调用 X 网页使用的 GraphQL 接口。X 的 queryId 和请求参数可能变化,建议先在浏览器开发者工具的 Network 面板中找到成功的 HomeLatestTimeline 请求。
在 VS Code 的本机用户设置中填写:
{
"ETFORME.xBearerToken": "your-bearer-token",
"ETFORME.xCookie": "auth_token=...; ct0=...; twid=...",
// 可选;留空时从 Cookie 的 ct0 读取。
"ETFORME.xCsrfToken": "",
// X 要求动态请求头时,从成功的浏览器请求中复制。
"ETFORME.xExtraHeaders": {},
}
xBearerToken 和 xCookie 包含敏感信息,配置作用域为本机。不要提交到仓库或共享工作区设置。
配置完成后:
- 点击 Activity Bar 中的
xReader。
- 选择
For You 或 Following,打开只读 Markdown 时间线。
- 点击编辑器右上角的刷新按钮获取最新内容。
- 选择
查看推文详情,输入推文 URL 或数字 ID;也可以点击推文标题上方的 CodeLens。
- 展开“关注的作者”,使用分组右侧按钮搜索、清空搜索、切换排序或刷新。
- 在作者右侧置顶或取消置顶;点击作者的推文按钮可打开该作者时间线。
关注作者列表最多自动加载 500 人或 10 页。若 Cookie 中没有 twid,可填写 ETFORME.xFollowingUserId,或从浏览器请求复制 variables 到 ETFORME.xFollowingQueryParameters.variables。
如果 X 调整接口,可覆盖以下设置:
ETFORME.xTimelineEndpoint 与 ETFORME.xTimelineQueryParameters
ETFORME.xForYouTimelineEndpoint 与 ETFORME.xForYouTimelineQueryParameters
ETFORME.xTweetDetailEndpoint 与 ETFORME.xTweetDetailQueryParameters
ETFORME.xFollowingQueryParameters
对象类型的查询参数值均为字符串;variables、features 和 fieldToggles 应填写浏览器请求中的完整 JSON 字符串。
阅读 Wikipedia 内容
Wikipedia 阅读器直接匿名调用中文或英文站点的公开 Action API,不需要登录或配置密钥:
- 点击 Activity Bar 中的
Wikipedia。
- 点击“语言:中文/English”选择之后搜索使用的站点语言。
- 点击“搜索维基百科”,输入关键词并从搜索结果中选择文章;也可直接粘贴中英文 Wikipedia 文章链接。
- 文章会作为只读
et-for-me-wikipedia: Markdown 文档打开,编辑器右上角可刷新当前文章。
- 展开“搜索记录”可按原语言重新搜索;历史按语言和关键词去重,最多保留 50 条,并支持逐条删除或全部清空。
直接粘贴文章链接不会写入关键词历史。搜索历史无需登录即可保存在本机;已登录 VS Code 并启用 Settings Sync 时,也会同步到其他设备。
阅读知乎内容
知乎阅读器使用知乎网页当前调用的内部接口。先在浏览器开发者工具 Network 面板找到成功的知乎请求,将完整 Cookie 配置到 VS Code 的本机用户设置:
{
"ETFORME.zhihuCookie": "your-cookie",
"ETFORME.zhihuTimelineCount": 20,
"ETFORME.zhihuCommentCount": 20,
"ETFORME.zhihuExtraHeaders": {},
}
zhihuCookie 和 zhihuExtraHeaders 可能包含敏感信息,均为本机作用域;不要提交到仓库或共享工作区设置。如果知乎要求额外请求头,可把字符串请求头加入 zhihuExtraHeaders,其中 cookie、host 和 content-length 会被忽略。
配置完成后:
- 点击 Activity Bar 中的“知乎”。
- 选择“推荐”或“关注”,打开只读 Markdown 时间线;单页解析不足配置数量时会自动继续读取下一页。
- 选择“搜索”,输入关键词后打开只读 Markdown 搜索结果;搜索结果只展示回答和专栏文章。
- 点击内容标题上方的“查看详情”CodeLens,打开回答或专栏文章完整正文和配置数量的根评论;评论每次请求 10 条并自动翻页,累计最多 100 条。进入详情后点击“收藏文章”可把当前内容加入收藏。
- 选择“查看回答/文章”可直接粘贴
www.zhihu.com/question/.../answer/... 或 zhuanlan.zhihu.com/p/... 链接;问题主页包含多个回答,不支持直接打开。
- 进入回答或专栏文章详情后会自动加入“浏览记录”,收藏文章和浏览记录都会通过 VS Code Settings Sync 同步;点击记录可重新打开详情,右键可删除或清空。
- 点击编辑器右上角的刷新按钮,重新获取当前时间线、搜索结果或详情。
知乎网页接口不是公开 API,可能随时调整。ETFORME.zhihuRecommendEndpoint、ETFORME.zhihuFollowingEndpoint、ETFORME.zhihuSearchEndpoint 和 ETFORME.zhihuCommentEndpointTemplate 可在接口路径变化时覆盖默认地址。401/403 通常表示 Cookie 或额外请求头已失效,429 表示请求频率受限。
工作区约定
完整工作区可以按下面的结构组织:
english-workspace/
├── Words/ # 已学单词 Markdown
├── Test/ # 背诵记录和复习次数
├── Lesson/ # 课程文章,用于课程序号跳转
├── Roots & Affixes/ # 词根、前缀、后缀 Markdown
├── assets/
│ ├── audios/ # 本地音频
│ └── videos/ # 本地视频
├── config/
│ ├── correlations.json # 关联单词
│ ├── fileIds.json # 文件 ID、优先释义和文件级关联词
│ ├── forms.json # 词形、同义词、反义词、发散词等
│ ├── hints.json # 图片提示
│ ├── ignores.json # Check 时忽略的单词
│ ├── links.json # 外部链接
│ ├── phrases.json # 短语
│ ├── remarks.json # 备注
│ ├── rps.json # 词根、前缀、后缀索引
│ ├── similar.json # 相似词
│ └── words.json # 自定义 Markdown 释义
├── Todo.md # 待复习单词入口
├── Write.md # 默写素材,使用二级标题和代码块组织
└── Review.md # 自动生成的复习文档
config 文件多数可以通过单词右键菜单维护,无需手写。若需要手动创建,列表型文件先写入 [],words.json 写入 {},rps.json 使用下面的初始结构:
{
"roots": [],
"prefixes": [],
"suffixes": []
}
常用入口
状态栏
| 入口 |
作用 |
FocusENG |
初始化或刷新词库;悬停后还可执行上传、行内翻译、生成 UUID 和 Socket 连接等命令。 |
Check |
开启或关闭未掌握单词高亮。 |
| 悬停模式 |
在默认、关联词、短语、备注、词性、图片、词根词缀、形式、相似词和复习次数等模式间切换。 |
Total |
显示当前行或选中文本中的英文单词数量。 |
Markdown 右键菜单
| 命令 |
作用 |
Jump |
跳转到当前单词在 Words 或 Review.md 中的定义。 |
Add |
把当前单词加入 Todo.md。 |
Add Correlation |
把当前单词的关联主词加入复习列表。 |
Translate |
使用百度翻译处理选中文本。 |
Correlation |
编辑关联单词。 |
Use File Correlation / Use Global Correlation |
设置文件级或全局优先展示的关联词。 |
Phrases |
编辑短语和中文释义。 |
Remark |
编辑单词备注。 |
Forms |
编辑词形、同义词、反义词、发散词和介词搭配。 |
Rps |
编辑词根、前缀和后缀。 |
Similar |
编辑形近或易混淆单词。 |
Hints |
上传或绑定图片提示。 |
Links |
编辑外部链接。 |
Merge Subtitle |
合并选中的连续字幕块。 |
在Panel中打开 |
在当前光标位于视频链接时打开 Video Panel。 |
CodeLens
Words/*.md 和 Review.md 的标题:Pair、Shuffle。
Todo.md 的 ## Review:Sync、Generate。
- 音频和视频时间轴:定位、播放、循环、片段和隐藏台词。
- xReader 推文标题:查看推文详情和回复。
快捷键
| Windows / Linux |
macOS |
功能 |
Ctrl+Q |
Cmd+Q |
跳转到 Markdown 中当前单词的定义。 |
Ctrl+E |
Cmd+E |
开启或关闭行内翻译。 |
Ctrl+R |
Cmd+R |
切换到 Desktop 0;此功能主要面向 Windows。 |
F5 |
— |
显示当前光标所在单词的悬停内容。 |
配置项
在 VS Code 设置中搜索 ETFORME:
| 设置项 |
默认值 |
作用 |
ETFORME.baiduApiKeys |
[] |
百度翻译账号列表。 |
ETFORME.showImg |
false |
是否在悬停释义中显示图片。 |
ETFORME.phoneticSymbols |
BrE |
发音类型:BrE 英音,AmE 美音。 |
ETFORME.uploadHost |
空 |
上传与同步服务地址。 |
ETFORME.webHost |
空 |
Pair 等 Web 页面地址。 |
ETFORME.authCode |
空 |
上传文件或图片时使用的授权码。 |
ETFORME.articleFolders |
[] |
限定允许上传的文章目录。 |
ETFORME.xBearerToken |
空 |
X API Bearer Token,本机设置。 |
ETFORME.xCookie |
空 |
X 完整 Cookie,本机设置。 |
ETFORME.xCsrfToken |
空 |
可选 CSRF Token;默认读取 Cookie 中的 ct0。 |
ETFORME.xExtraHeaders |
{} |
X 请求所需的额外请求头。 |
ETFORME.xTimelineEndpoint |
内置地址 |
Following 时间线 GraphQL 地址。 |
ETFORME.xTimelineQueryParameters |
{} |
Following 时间线查询参数覆盖。 |
ETFORME.xForYouTimelineEndpoint |
内置地址 |
For You 时间线 GraphQL 地址。 |
ETFORME.xForYouTimelineQueryParameters |
{} |
For You 时间线查询参数覆盖。 |
ETFORME.xTimelineCount |
20 |
每次时间线请求的推文数量。 |
ETFORME.xTweetDetailEndpoint |
内置地址 |
推文详情和回复 GraphQL 地址。 |
ETFORME.xTweetDetailQueryParameters |
{} |
推文详情查询参数覆盖。 |
ETFORME.xFollowingUserId |
空 |
当前 X 账号的数字用户 ID。 |
ETFORME.xFollowingCount |
100 |
每页请求的关注作者数量。 |
ETFORME.xFollowingQueryParameters |
{} |
Following 作者列表查询参数覆盖。 |
ETFORME.zhihuCookie |
空 |
知乎请求使用的完整 Cookie,本机设置。 |
ETFORME.zhihuExtraHeaders |
{} |
知乎请求所需的额外字符串请求头。 |
ETFORME.zhihuTimelineCount |
20 |
推荐每次 10 条,累计 30 条;其它使用此值。 |
ETFORME.zhihuRecommendEndpoint |
内置地址 |
知乎推荐时间线接口地址。 |
ETFORME.zhihuFollowingEndpoint |
内置地址 |
知乎关注时间线接口地址。 |
ETFORME.zhihuSearchEndpoint |
内置地址 |
知乎搜索接口地址。 |
ETFORME.zhihuCommentCount |
20 |
评论每次请求 10 条,循环读取,最多 100 条。 |
ETFORME.zhihuCommentEndpointTemplate |
内置地址 |
知乎根评论接口模板。 |
项目结构
src/
├── api/ # 远端 API 请求与类型
├── commands/ # 命令、悬停、补全、翻译和字幕交互
├── dictionaries/ # 内置词典数据
├── panels/ # Word、Audio、Video、Tool Webview Provider
├── statusBars/ # 状态栏入口
├── stores/ # 扩展运行时状态和命令常量
├── test/ # Mocha / VS Code 扩展测试
├── types/ # TypeScript 类型
├── utils/ # Markdown 解析、文件读写和通用工具
├── webview/ # 由独立前端项目构建生成,不在本仓库修改
├── wikipediaReader/ # Wikipedia 搜索、Markdown 转换、历史和侧边栏
├── xReader/ # X GraphQL 客户端、解析、Markdown 和侧边栏
├── zhihuReader/ # 知乎时间线、回答/文章解析、Markdown 和侧边栏
└── extension.ts # 扩展入口
扩展使用 TypeScript、webpack 5、marked、lodash、axios、Socket.IO、oxlint 和 oxfmt。Webview 前端由独立项目构建到 src/webview/webview-dist,此目录及 dist 都属于构建产物。
本地开发
安装依赖:
npm install
启动 webpack 监听,然后在 VS Code 中按 F5 启动 Extension Development Host。项目的 F5 配置会先通过 CLI 启动开发宿主,再附加 Node 调试器,避开部分 VS Code 版本在自动注入调试器时导致的扩展宿主 134 崩溃:
npm run dev
此模式保留普通断点调试,但在附加完成前,扩展的激活代码可能已经执行。停止调试会断开连接并保留开发宿主窗口;重新按 F5 前先关闭该窗口。如果提示 Inspector 端口 9333 已被占用,也请先关闭旧的开发宿主。
该配置用于规避 VS Code 的 F5 宿主启动问题 #336233。如果需要调整调试端口,请同步修改 .vscode/launch.json 和 .vscode/tasks.json 中的 9333。
常用检查和构建命令:
npm run compile # webpack 开发构建
npm run compile-tests # 编译测试
npm run lint # oxlint
npm test # VS Code 扩展测试
npm run package # 生产构建
node --test scripts/test-start-extension-host.cjs # 调试启动脚本回归
项目原有的 ws 可选依赖 bufferutil、utf-8-validate 告警可以忽略。开发时不要修改 node_modules、src/webview、src/webview/webview-dist、webview-dist 或 dist。