
1. 用 GPT-4 写 VSCode 插件为什么六个坑一个都躲不掉用 GPT-4 从零生成一个 VSCode 插件代码能不能装、能不能编译、能不能跑起来我拿一个「调整 Markdown 标题级别」的小插件做了完整实测让模型一次性生成package.json、extension.ts、三个命令文件然后自己走一遍安装、编译、调试、运行。结论是——代码确实能跑但中间踩了六个坑每一个都和 TypeScript 类型定义、Node.js 运行时兼容、插件激活事件、调试配置这些「领域知识」强相关。这篇不是「GPT 写代码好厉害」的爽文而是一份可跟做的排障记录。适合两类人一是想用 GPT-4 辅助开发 VSCode 插件、但被tsc报错卡住的开发者二是已经写过插件、想看看大模型在哪些环节最容易「一本正经地胡说」的人。下面每个问题我都会给出报错原文、根因、可复制的修复配置以及一条能立刻验证的动作。你照着改基本能绕开同类坑。2. 前置准备TaoToken 接入与插件工程骨架2.1 为什么用 TaoToken 做模型入口我这次把 GPT-4 的调用统一走 TaoToken原因是它同时提供对话、Coding Plan 和 API 三种形态调试插件时切换模型不用改代码结构。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个地址不加 UTM。如果你只是想让模型帮你补全extension.ts里的命令注册逻辑用模型对话就够了如果是长期做插件开发、要反复生成和修正多文件代码Coding Plan 更省事。2.2 先拿 Key再建工程打开 API Keys 页面创建一个密钥注意别把 Key 写进package.json或提交到仓库。拿到 Key 后本地建一个空目录用官方脚手架起手npm install -g yo generator-code yo code选择New Extension (TypeScript)名字填adjust-heading-level。脚手架会生成package.json、tsconfig.json、src/extension.ts和.vscode/launch.json。这一步很关键——GPT-4 直接生成的工程往往缺tsconfig.json和launch.json而这两个文件正是后面好几个报错的根源。所以我的做法是先用脚手架拿到「能跑的最小骨架」再让 GPT-4 往里面填业务代码。3. 六个高频问题与可复制配置3.1 问题一vscode-test版本找不到第一次yarn安装依赖就翻车Couldnt find any versions for vscode-test that matches ^1.6.2 ? Please choose a version of vscode-test from this list: 1.6.1根因是 GPT-4 把vscode-test的版本号写成了^1.6.2但实际存在的最高版本是1.6.1。这类「版本号幻觉」在模型生成package.json时非常常见因为它对数字的推断并不可靠。修复就是改回真实版本devDependencies: { types/node: ^14.17.0, types/vscode: ^1.62.0, typescript: ^4.4.2, vscode-test: ^1.6.1 }验证动作删掉node_modules和yarn.lock重新yarn看到Done in Xs即通过。3.2 问题二tsc找不到tsconfig.json编译时报error TS5057: Cannot find a tsconfig.json file at the specified directory: ./.GPT-4 生成的目录里只有package.json和src/没有tsconfig.json。TypeScript 必须有这个文件才知道怎么编译。补一个最小可用配置{ compilerOptions: { module: commonjs, target: ES2020, outDir: out, lib: [ES2020], sourceMap: true, rootDir: src, strict: true }, exclude: [node_modules, .vscode-test] }注意outDir要和package.json里的main字段对应否则运行时会找不到入口。3.3 问题三找不到vscode模块补完tsconfig.json后再编译报一串error TS2307: Cannot find module vscode or its corresponding type declarations.根因是esModuleInterop的取值。GPT-4 生成的代码用了import * as vscode from vscode而 TypeScript 4.4 起esModuleInterop默认是true两者叠加会让类型解析出问题。把tsconfig.json里这一项显式关掉esModuleInterop: false验证动作yarn compile如果只剩业务逻辑报错、不再有TS2307说明模块解析已经通了。3.4 问题四导入了不存在的函数编译到最后只剩一个错error TS2305: Module ../extension has no exported member adjustHeadingLevel.GPT-4 在setHeadingLevel.ts里import { adjustHeadingLevel } from ../extension但extension.ts根本没导出这个函数。模型在声明依赖关系时经常「脑补」一个不存在的符号。修复方式是删掉这行 import把逻辑内联进去import * as vscode from vscode; export async function setHeadingLevel() { const editor vscode.window.activeTextEditor; if (!editor) { return; } const selection editor.selection; const selectedText editor.document.getText(selection); const match selectedText.match(/^(#)\s(.*)$/); if (!match) { vscode.window.showErrorMessage(Invalid selection.); return; } const input await vscode.window.showInputBox({ prompt: 输入标题级别 1-6 }); if (!input) { return; } const level parseInt(input, 10); const newHeading #.repeat(level) match[2]; await editor.edit((b) b.replace(selection, newHeading)); }3.5 问题五命令 ID 对不上激活事件失效按 F5 启动调试窗口执行命令时报command adjust-heading-level.increaseHeadingLevel was not found这是最隐蔽的一个坑。extension.ts里注册的是extension.increaseHeadingLevel而package.json的contributes.commands里写的是adjust-heading-level.increaseHeadingLevel两边前缀不一致。VSCode 靠命令 ID 匹配对不上就找不到。统一改成extension.前缀contributes: { commands: [ { command: extension.increaseHeadingLevel, title: Increase Heading Level }, { command: extension.decreaseHeadingLevel, title: Decrease Heading Level }, { command: extension.setHeadingLevel, title: Set Heading Level } ] }顺带说一句基于命令的激活现在 VSCode 能自动检测activationEvents里那三行onCommand:可以删掉不影响触发。3.6 问题六一个字符导致逻辑反向命令能跑了但点「Increase」标题级别反而降了。看increaseHeadingLevel.tsconst newLevel Math.max(1, currentLevel - 1); // 错应该是currentLevel 1。GPT-4 在生成对称逻辑时很容易把加减号写反这类单字符 bug 靠肉眼 review 很难发现必须靠实际运行验证。改完重新编译运行标题级别正常递增。3.7 调试配置launch.json别漏GPT-4 不会主动给你launch.json没有它就没法按 F5 调试。在.vscode/launch.json里放这份配置{ version: 0.2.0, configurations: [ { name: Run Extension, type: extensionHost, request: launch, args: [--extensionDevelopmentPath${workspaceFolder}], outFiles: [${workspaceFolder}/out/**/*.js], preLaunchTask: npm: compile } ] }preLaunchTask指向npm: compile保证每次调试前先编译避免改了代码忘了编译导致跑的是旧版本。4. 验证请求与成功结果改完上面六处走一遍完整验证链路。先编译yarn compile看到Done in 0.80s且无 error说明 TypeScript 类型和模块解析都通了。然后按 F5会弹出一个新的 VSCode 窗口标题栏带[Extension Development Host]。在这个窗口里打开一个 Markdown 文件选中一行## 标题按CtrlShiftP输入Increase Heading Level标题应该变成### 标题再执行Decrease变回##执行Set输入4变成####。如果你想让模型帮你检查这段命令注册逻辑有没有遗漏可以把extension.ts贴到模型对话里让它逐行核对如果是长期维护这个插件、要反复迭代命令用 Coding Plan 把整个工程上下文挂上去会更顺。API 调用方式参考接入文档基址仍是 https://taotoken.net/api 。5. 本篇常见错排查TS5057找不到tsconfig.json确认文件在工程根目录且tsc -p ./的路径指向它。TS2307找不到vscode模块检查tsconfig.json里esModuleInterop是否为false以及types/vscode是否装上了。TS2305没有导出成员全局搜一下这个符号多半是 GPT-4 凭空造的删掉 import 或补上真实导出。命令 not found把package.json的contributes.commands和extension.ts的registerCommand两处 ID 逐字对比前缀必须完全一致。按 F5 没反应检查.vscode/launch.json是否存在、preLaunchTask是否指向有效的编译脚本。改了代码行为没变多半是没重新编译out/里还是旧 JS手动yarn compile一次。6. 把模型接进你的插件开发流六个问题里真正属于「GPT-4 不会写代码」的只有问题四和问题六其余四个都是工程配置和领域知识缺口。这也说明一件事模型能生成 80% 的样板代码但tsconfig.json、launch.json、命令 ID 对齐、激活事件这些「胶水层」仍然需要你自己兜底。我的建议是把流程固定成三步先用脚手架拿到可运行骨架再让模型填业务逻辑最后用本文的六项检查清单过一遍。需要长期做插件或 Agent 类开发直接上 Coding Plan 把工程上下文挂住只是临时验证某段命令注册逻辑用模型对话贴代码问就行。密钥和接入方式都在 API Keys 和接入文档里按需取用即可。