yeoman 已弃用,必须用 npm create vscode-extension@latest 创建 vs code 插件;yo code 会失败或生成过时模板,因 vs code 1.80+ 移除支持、api 和工具链已升级,新 cli 提供 typescript、webview、测试等现代配置。

Yeoman 已不推荐用于新建 VS Code 插件 —— 官方早已弃用 generator-code 的旧流程,现在必须用 vscode-dev-cli(即 npm create vscode-extension@latest)。
为什么 yo code 现在会失败或生成过时模板
VS Code 1.80+ 彻底移除了对 generator-code 的支持;即使你全局装了 yo 和 generator-code,运行 yo code 也会卡在选择语言、报 Cannot find module 'yeoman-environment' 或生成出不含 package.json#engines.vscode、无 TypeScript 配置、无 Webview 示例的老旧结构。
根本原因是:Yeoman 模板长期未更新,而 VS Code 插件 API、打包工具链(如 @vscode/test-electron)、TypeScript 版本和 ESLint 规则已全面升级。
-
yo code生成的activationEvents还是*,不符合当前性能审查要求 - 默认不启用
webviewScripts安全配置,本地资源加载直接被拦截 - 测试脚本仍依赖已废弃的
vscodenpm 包(非@vscode/test-electron)
正确创建插件模板:只用一行命令
跳过 Yeoman,直接使用官方维护的现代 CLI:
npm create vscode-extension@latest
它会交互式询问:extension name、publisher name、是否启用 TypeScript、是否包含 Webview、是否添加测试等。全程无依赖冲突,生成结果与 VS Code Marketplace 提交规范完全一致。
- 生成的
package.json自动设"engines": {"vscode": "^1.85.0"}(随 CLI 版本动态更新) - TypeScript 配置启用
isolatedModules: true和verbatimModuleSyntax,适配新 TS 版本 -
src/extension.ts中的activate函数默认按功能点拆分,而非全塞进一个函数 - 测试环境预置
beforeAll启动真实 VS Code 实例,非模拟对象
如果已有旧项目,怎么迁移到新结构
不要试图把 yo code 模板“升级”,而是用新 CLI 初始化空项目,再手动迁移核心逻辑:
- 复制旧项目的
src/下业务代码(如registerCommand、WebviewPanel创建逻辑)到新项目的src/extension.ts - 检查
package.json#contributes是否遗漏menus、keybindings等声明 —— 新 CLI 不自动生成这些,需你按需补全 - 替换测试入口:旧项目用
./test/runTest.ts+vscode包,新项目改用./test/suite/index.ts+@vscode/test-electron - 删除
node_modules/.yo-rc.json和所有yo-related devDependencies(如yo、generator-code)
常见报错与绕过方式
执行 npm create vscode-extension@latest 时若提示 command not found,不是网络问题,而是 Node.js 版本太低:
- 必须 Node.js ≥ 18.17.0(
npm -v应 ≥ 9.6.7);低于此版本会静默失败,看似没反应 - 若用 pnpm/yarn,需显式加前缀:
pnpm dlx vscode-dev-cli或yarn create vscode-extension - Windows 上 PowerShell 执行失败?换用 VS Code 内置终端(
Ctrl+Shift+`),确保是 Node.js 环境而非旧版 cmd - 生成后
npm install报EBADENGINE?删掉package-lock.json和node_modules,再重装
真正麻烦的从来不是“怎么生成”,而是生成后没意识到 activationEvents 必须精确到 command ID、Webview 的 localResourceRoots 必须显式声明、以及打包时 vsce package 会校验 engines.vscode 是否匹配当前 VS Code 版本 —— 这些细节,新 CLI 模板都帮你设对了,旧 Yeoman 模板不会。











