1. 从零认识 VS Code 左侧抽屉面板如果你写过 VS Code 插件大概率遇到过这个需求插件装好了命令面板里能搜到但左侧活动栏Activity Bar里空空如也用户根本不知道你的功能藏在哪。这就是「左侧抽屉面板」要解决的问题——它指的是 Activity Bar 上的图标入口以及点开后 Side Bar 里展开的视图容器View Container和具体视图View。VS Code 插件开发里左侧抽屉面板本质上由package.json里的contributes.viewsContainers和contributes.views两个字段驱动。前者负责在活动栏放一个带图标的容器后者负责往容器里塞具体的抽屉子项。图标设置则分两层一层是活动栏上那个小图标另一层是插件市场里展示的插件图标两者路径写法不同很多人第一次做会混淆。这篇面向需要为插件添加自定义视图容器的开发者交付一份可直接复制的package.json视图容器与图标字段骨架同时把 TaoToken 统一 Key/API 通道的settings.json配置片段一并给出。TaoToken 在这里的作用是当你的插件需要调用大模型能力比如做一个代码解释抽屉不用在插件里硬编码各家 Key而是通过统一通道走插件配置更干净。适合已经能跑通 Hello World 插件、想进一步做侧边栏交互的开发者跟做。2. TaoToken 前置统一 Key 与 API 通道准备在动手改package.json之前先把模型调用通道准备好。插件里如果要做「选中代码 → 抽屉面板里显示解释」这类功能必然要发请求。我试过把 Key 直接写进插件源码结果一提交就泄露后来改成走统一通道插件只认一个地址和一个 Key。你需要先拿到一个可用的 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后进入控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建 API Key。创建时建议按插件名命名比如vscode-drawer-demo方便后续排查是哪个插件在调用。拿到 Key 后API 通道地址是 https://taotoken.net/api这个地址不加 UTM 参数直接用于代码里的 baseURL。如果你用的是 Anthropic 风格的接口接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里有说明Claude Code 相关的配置参考 https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentClaudeCodeAnthropicutm_campaignrewrite。注意Key 不要写进package.json也不要提交到 Git。插件运行时从 VS Code 的配置里读配置存在用户本地的settings.json中。这一步的核心产出是一个 Key 和一个 baseURL。后面第 3 节的settings.json片段会用到它们。如果你暂时只想验证抽屉面板和图标不接模型也可以先跳过 Key等面板跑通再回来补。3. 可复制配置package.json 视图容器与图标骨架现在进入正题。假设你的插件工程叫demo06-iconSet目录结构里有一个resources文件夹放图标。先看package.json里需要加的完整字段。3.1 viewsContainers 定义活动栏容器viewsContainers分activitybar和panel两类左侧抽屉面板用的是activitybar。每个容器需要id、title、icon三个属性icon是相对package.json的本地路径。{ contributes: { viewsContainers: { activitybar: [ { id: demo06-drawer, title: 果盘抽屉, icon: resources/fruit.svg } ] } } }这里id是容器的唯一标识后面views里要引用它。title是鼠标悬停时显示的提示文字。icon建议用 24x24 的 SVGVS Code 会自动适配深浅主题如果用 PNG浅色主题下可能看不清。3.2 views 描述抽屉子项容器有了里面还得有抽屉。views字段按容器 id 分组每个视图有id和name{ contributes: { views: { demo06-drawer: [ { id: demo06.orange, name: 橙子区 }, { id: demo06.apple, name: 苹果区 } ] } } }demo06-drawer就是上面容器的 id两个视图会以可折叠分组的形式出现在侧边栏。name是显示给用户看的标题。3.3 viewsWelcome 自定义欢迎内容抽屉展开后如果没内容会显示默认的「暂无视图」可以用viewsWelcome自定义。它支持字符串、换行、执行命令、打开网页链接{ contributes: { viewsWelcome: [ { view: demo06.orange, contents: 欢迎来到橙子区。\n[执行 Hello World](command:demo06.helloWorld)\n[打开官网](https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content)\n[查看接入文档](https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite) } ] } }view绑定上面views里的 idcontents里\n换行command:触发命令直接写 URL 会打开浏览器。这样用户点开抽屉就有引导不会一脸茫然。3.4 插件市场图标设置活动栏图标和插件市场图标是两回事。市场图标用顶层icon字段路径同样相对package.json{ icon: resources/marketplace-icon.png }市场图标建议 128x128 的 PNG带透明背景。注意这个icon字段和viewsContainers里的icon不在同一层级别写混了。3.5 settings.json 配置 TaoToken 通道插件运行时读取用户配置。在 VS Code 的settings.json里加{ demo06.apiBase: https://taotoken.net/api, demo06.apiKey: 你的_TaoToken_Key, demo06.model: claude-sonnet-4-20250514 }然后在插件代码里用vscode.workspace.getConfiguration(demo06)读取。这样 Key 不进源码换 Key 也不用重新打包插件。模型名可以按需替换具体可用模型在模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 里能看到。4. 验证请求抽屉面板与图标生效步骤配置写完了怎么确认真的生效按下面步骤走。第一步按F5启动扩展开发宿主窗口。VS Code 会新开一个窗口标题栏带[扩展开发宿主]。第二步看左侧活动栏。如果配置正确活动栏底部附近会出现你设置的图标本例是果盘图标。如果没出现先检查viewsContainers的icon路径是否存在路径错了 VS Code 会静默忽略整个容器。第三步点击图标。侧边栏会展开显示「橙子区」和「苹果区」两个可折叠分组。点开「橙子区」应该看到viewsWelcome里的欢迎文字和三个链接。第四步点「执行 Hello World」链接。如果命令已注册会触发对应逻辑没注册则报「command not found」。命令注册在extension.ts里import * as vscode from vscode; export function activate(context: vscode.ExtensionContext) { const hello vscode.commands.registerCommand(demo06.helloWorld, () { vscode.window.showInformationMessage(Hello from 果盘抽屉); }); context.subscriptions.push(hello); }第五步验证模型通道。在命令里发一个请求确认 Key 和 baseURL 生效const config vscode.workspace.getConfiguration(demo06); const base config.getstring(apiBase); const key config.getstring(apiKey); const res await fetch(${base}/v1/messages, { method: POST, headers: { Content-Type: application/json, x-api-key: key as string, anthropic-version: 2023-06-01 }, body: JSON.stringify({ model: config.getstring(model), max_tokens: 256, messages: [{ role: user, content: 用一句话说明抽屉面板是什么 }] }) }); const data await res.json(); vscode.window.showInformationMessage(JSON.stringify(data).slice(0, 120));跑通后你会看到信息提示里返回了模型内容。这一步成功说明抽屉面板、图标、统一 Key 通道三者都通了。5. 本篇常见错排查做这个功能时踩过的坑集中在几个地方列出来对照。图标不显示最常见是路径问题。icon路径相对package.json不是相对src。如果图标放在resources/fruit.svg而package.json在根目录写resources/fruit.svg正确写成./resources/fruit.svg一般也行但写成src/resources/fruit.svg就错了。另外 SVG 里如果有外部引用或脚本VS Code 会拒绝渲染。容器出现但视图为空检查views里的 key 是否和viewsContainers的id完全一致大小写敏感。demo06-drawer和demo06-Drawer是两个不同的 id。viewsWelcome 链接不生效command:后面的命令必须在contributes.commands里声明过否则链接是灰的。URL 链接必须以https://开头写相对路径不会打开。改了 package.json 没反应扩展开发宿主窗口不会热重载package.json的 contributes 字段。改完要关掉宿主窗口重新按F5。只改 TypeScript 代码的话重新加载窗口CtrlR即可。请求返回 401Key 没读到或写错。先在设置里搜demo06.apiKey确认值存在再检查请求头字段名。Anthropic 风格用x-api-keyOpenAI 风格用Authorization: Bearer别混用。接入文档里有两种风格的对照。模型名报错model字段填了不存在的模型。去模型对话页确认当前可用模型名复制准确的字符串。6. 后续接入与长期编码建议抽屉面板跑通后下一步通常是让它真正干活选中代码 → 抽屉里显示解释、生成测试、做重构建议。这时候 Key 管理会变复杂如果你同时维护多个插件建议统一走 TaoToken 的 Coding Plan把额度集中管理避免每个插件单独配 Key。长期做编码类插件的可以看 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 了解套餐细节。日常调试时我习惯把demo06.apiBase和demo06.model做成工作区级配置demo06.apiKey放用户级配置这样团队共享.vscode/settings.json时不会泄露 Key。另外插件发布前记得把viewsWelcome里的测试链接换成正式文档地址市场审核对死链比较敏感。如果你还没创建 Key回到 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 建一个然后按第 3.5 节填进settings.json。整个流程从配置到验证顺利的话半小时内能跑通。
企业数字化 ERP 产品动态
相关推荐
SpringBoot+Vue大创管理系统毕设全流程解析 1. 毕设开题先想明白:大创管理系统到底在管什么如果你正在为Java Web方向的毕业设计发愁,那么“大学生创新创业训练项目管理系统”这个题目,大概率已经在你的备选清单里出现过。这个被无数高校当成标配业务场景的系统,从题目复杂度… · 2026/9/26 14:03:34
DeepSeek Harness 安装指南:从环境搭建到工具调用与插件开发 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 14:03:28
SpringBoot+Vue前后端分离高校选课系统:乐观锁防超选与JWT鉴权实战 简介:这套资源是基于SpringBoot与Vue实现的高校学生选课系统完整Java源码,面向计算机相关专业毕业设计或需要快速搭建选课平台的开发者。系统采用前后端分离与B/S架构,覆盖学生教师账号管理、课程发布、选课冲突检测、结果查询等核心业务&… · 2026/9/26 14:03:28
AI让唐代仕女跳舞:图生视频与姿态控制实战教程 最近短视频平台上有一类内容特别容易刷屏:博物馆里的唐代仕女忽然“活”了过来,跟着音乐节奏跳舞、转圈、拂袖;古画里的簪花少女变成动画人物,神态动作都非常自然。很多读者在后台问,这种视频到底怎么做的?… · 2026/9/26 14:37:56
从提示词到产线:多智能体代码审查的工程化落地实践 1. 从提示词到产线:为什么代码审查需要多智能体 代码审查这件事,写过几年代码的人都有体会。它表面上是一个“看代码”的动作,实际上背后牵扯的东西特别多:风格一致性、潜在缺陷、安全边界、可维护性、团队规范、上下文理解&#… · 2026/9/26 14:37:56
TeamAI-CLI:腾讯开源的团队级AI Agent中间层,让AI能力成为团队资产 1. 为什么团队需要一个 AI Agent 中间层1.1 从个人效率工具到团队能力资产过去一年多,我身边几乎每个开发者都在用 AI 编程助手。有人用 Claude CLI,有人用 Codex CLI,有人用各种 IDE 插件,每个人都在自己的终端里攒了一堆 prompt… · 2026/9/26 14:37:56
前端开发环境搭建:Node.js、npm、VSCode 配 TaoToken 统一 Key 通道 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 14:37:50
设计在线文件分享系统:从分片上传到对象存储的核心决策 Design an Online File-sharing System | Preparation很多人拿到"设计一个在线文件分享系统"这道题,第一反应是画一张架构图:前端、后端、对象存储、CDN,再加上一个消息队列,看起来五脏俱全。但到了追问环节,… · 2026/9/26 14:37:43
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46