VSCode自定义主题打包发布失败,90%因themes/路径、JSON结构或package.json声明未对齐:themes/须在根目录且全小写连字符命名;theme.json必须含colors和tokenColors字段,colors键为预定义ID,tokenColors用scope+settings数组,透明度用#RRGGBBAA;package.json中contributes.themes需按uiTheme类型分文件声明,label与文件名语义一致,engines.vscode版本不超本地,vsce publish前需PAT、publisher、login三者严格匹配。

VSCode自定义主题打包失败或发布后不显示,90% 是因为 themes/ 目录路径、JSON 结构或 package.json 声明三者中至少有一处没对齐。
themes/ 目录必须手动创建且位置严格固定
VSCode 不会自动创建 themes/ 文件夹,也不接受嵌套路径(如 src/themes/ 或 dist/themes/)。它只认项目根目录下的 ./themes/your-theme-name.json(全小写 + 连字符)。
- 常见错误现象:
Extension 'xxx' has no themes报错,或主题列表里完全找不到你的主题名 - 文件名含空格、大写字母、中文、下划线都会导致加载失败,例如
MyTheme.json、dark theme.json都无效 - 如果用了 TypeScript 编写逻辑(极少见),编译后的 JSON 仍需手动放进
themes/,源文件不参与打包
theme.json 必须同时包含 colors 和 tokenColors 两个顶层字段
缺一不可。只配 colors,UI 控件色生效但代码还是默认高亮;只配 tokenColors,语法变色了但侧边栏、状态栏颜色仍是旧的——主题会显得割裂。
-
colors的键必须是 VSCode 预定义 color ID(如editor.background、activityBar.foreground),不能自创 -
tokenColors是数组,每项必须有scope(TextMate 作用域)和settings(含foreground等) - 透明度要写成
#RRGGBBAA格式,#fff或#ffffff都不支持 alpha - 想改函数名颜色?别猜 scope —— 用
Ctrl+Shift+P→Developer: Inspect Editor Tokens and Scopes实时点选获取最精确的 scope 链
package.json 中 contributes.themes 声明必须匹配实际文件与 uiTheme 类型
一个 JSON 文件只能对应一种 uiTheme:要么 "vs-dark"(深色),要么 "vs"(浅色),要么 "hc-black"(高对比度)。不能在一个文件里混写暗/亮模式。
- 如果要做多主题支持,必须在
contributes.themes数组里声明多个对象,各自指向不同 JSON 文件,例如:"path": "./themes/my-theme-dark.json"和"path": "./themes/my-theme-light.json" -
label是你在 VSCode 颜色主题菜单里看到的名字,建议与文件名语义一致(如"label": "Dark Sage"对应dark-sage.json) -
engines.vscode版本不能高于你本地安装的 VSCode 版本,否则vsce package会直接报错退出
vsce publish 失败最常见的三个硬性条件
不是网络问题,而是权限链断了一环:Azure DevOps 个人访问令牌(PAT)、Marketplace publisher 账号、package.json 中的 publisher 字段三者必须完全对得上。
- PAT 创建时
Organization必须选all accessible organizations,Scopes必须勾选Full access,否则vsce login成功但publish403 - publisher ID 在 Marketplace 创建后无法修改,必须和
package.json中的"publisher": "your-id"完全一致(大小写敏感) - 执行
vsce publish前,确保当前终端已运行过vsce login your-id并正确输入了 PAT —— 它不会提示你是否登录成功,失败只在 publish 阶段暴露
真正容易被忽略的是:theme.json 里哪怕只有一个逗号放错位置、一个引号没闭合,VSCode 就会静默跳过整个文件,既不报错也不加载。调试阶段务必先用 F5 启动扩展开发主机窗口,确认主题能出现在颜色菜单里,再打包发布。











