Command Launcher
一键启动项目开发命令,支持包管理器自动识别、批量启动、全局/项目作用域分离和拖拽排序。
功能特性
- 命令管理 — 在侧边栏树形面板中集中管理所有 Shell 命令(npm scripts、dev server、构建脚本等),支持添加、编辑、删除、分组。
- 全局/项目作用域分离 — 命令分为「全局命令」(所有工作区共享)和「项目命令」(仅当前工作区可用)两个作用域,数据分别持久化到
globalState 和 workspaceState,互不干扰。
- 拖拽排序 — 支持原生拖拽操作:拖动命令在同组内重新排序、拖到其他分组、甚至拖到另一个作用域。整组也可以拖拽移动。
- package.json 差异同步 — 一键扫描工作区
package.json 中的 scripts 字段,自动识别包管理器(npm / pnpm / yarn / bun),以「新增 / 已移除 / 未变更」三态对比已导入的命令:勾选导入新增项,已移除的脚本命令自动删除,不再重复导入同一批命令。
- 批量启动 — 将多个单命令组合为批量配置,一键依次启动全部子命令;子命令全部停止后批量状态自动同步。
- 搜索过滤 — 在面板标题栏输入关键词,按命令名称或内容实时过滤。
- 状态栏集成 — 底部状态栏显示正在运行的命令数量,点击可弹出快速选择面板启动/停止命令。
- 终端生命周期管理 — 命令运行时图标变为停止按钮,终端关闭后自动同步状态,批量命令的子命令全部退出后自动标记为已停止。
- 终端自动关闭 — 一次跑完的命令(如
pnpm install)退出码为 0 时自动关闭终端;失败时保留终端并提示退出码,dev server 可按单条命令豁免。
- 启动时状态对账 — IDE 退出 / 崩溃后残留的「运行中」状态在下次打开时自动打回「已停止」,点一次就能启动,不必先点一次「停止」;上一轮遗留的终端也会一并关掉,不会攒成孤儿终端。
安装
方式一:VS Code 市场
市场发布后可用,目前请通过 VSIX 安装。
在 VS Code 扩展面板中搜索 Command Launcher,点击安装即可。
方式二:VSIX 安装
- 从 GitHub Releases 下载最新
.vsix 文件。
- 在 VS Code 中打开扩展面板,点击右上角
... 菜单 → 从 VSIX 安装,选择下载的文件。
- 或使用命令行:
code --install-extension command-launcher-0.2.0.vsix
使用方法
面板概览
安装后,活动栏会出现 Command Launcher 图标(播放按钮)。点击后在侧边栏展开树形面板:
▼ 全局命令 (globe 图标)
▼ 分组名称 (folder 图标)
▸ 命令名称 (play 图标,点击启动)
▼ 批量启动
▸ 批量配置名 (layers 图标,显示包含命令数)
▼ 项目命令 (project 图标)
▼ 脚本命令
▸ dev
▸ build
常用操作
| 操作 |
方法 |
| 启动命令 |
点击命令左侧的播放图标,或右键 → 启动命令 |
| 停止命令 |
运行中点击停止图标,或右键 → 停止命令 |
| 停止全部 |
命令面板搜索「停止所有命令」 |
| 添加命令 |
面板标题栏 + 按钮,或右键分组 → 添加命令 |
| 编辑命令 |
右键命令 → 编辑命令 |
| 删除命令 |
右键命令 → 删除命令 |
| 重新导入 package.json |
面板标题栏 $(sync) 同步图标按钮,或「...」更多操作 → 重新导入 package.json |
| 搜索命令 |
面板标题栏搜索图标,输入关键词过滤 |
| 拖拽排序 |
直接拖动命令到目标位置(同组重排 / 跨组移动 / 跨作用域移动) |
| 上移 / 下移 |
右键命令 → 上移 / 下移 |
| 移至全局 / 项目 |
右键命令或分组 → 移至全局 / 移至项目 |
| 快速启动 |
点击底部状态栏 Launcher,在弹出列表中选择命令 |
| 添加批量配置 |
命令面板搜索「添加批量启动配置」,选择多个命令组合 |
重新导入 package.json(差异同步)
面板标题栏的 $(sync) 按钮,或「...」更多操作 → 重新导入 package.json,会把当前 package.json 的 scripts 与已导入的命令做一次差异对比,弹窗分三栏展示:
| 状态 |
含义 |
确认后 |
| 新增 |
package.json 里有、还没有导入过 |
默认勾选,勾选即导入到「脚本命令」分组 |
| 已移除 |
之前导入过、package.json 里已经没有 |
自动删除,不留在命令管理器 |
| 未变更 |
两边都有的脚本 |
保持不动 |
改个名也算「先删后加」:例如 dev 被改名为 opearion_dev,dev 进入「已移除」栏被自动删除,opearion_dev 进入「新增」栏等你勾选。关闭弹窗则不做任何增删。
两条自动删除的安全护栏:
- 运行中的命令先停后删 — 正在运行的过期命令会先停止其终端再删除。
- 被批量配置引用的命令跳过 — 被某个批量启动配置(
batchCommands)引用的命令不会被删除,会在弹窗里注明「被批量配置引用,已跳过」,避免留下悬空 id。
⚠️ 只有从 package.json 导入的命令(记录了 sourceScript)才受这套自动清理管理。你自己在 Launcher 里添加的命令永远不会被自动删除。
老版本导入的命令没有该记录,首次同步时会按「脚本命令」分组 + 命令名自动回填一次;名字对不上的保持原样、同样不受清理管理。
导入的命令只记录 pnpm run dev 这样的调用形式,不存 script 的真实内容,所以你在 package.json 里改 "dev": "vite" 为 "dev": "vite --host" 无需重新导入——运行时用的是最新内容。
截图
截图将在市场发布前补充。
配置
| 配置项 |
类型 |
默认值 |
说明 |
commandLauncher.autoScanOnOpen |
boolean |
true |
打开工作区时自动扫描 package.json。若发现 scripts 且当前项目尚无命令,会弹出提示询问是否导入。设为 false 可关闭自动扫描。 |
commandLauncher.autoCloseTerminal |
boolean |
true |
命令正常结束(退出码为 0)时自动关闭它创建的终端,不用手动关。退出码非 0 时保留终端并弹出警告,方便查看报错。可在「编辑命令」里按单条命令覆盖。 |
在 VS Code 设置中搜索 commandLauncher 即可修改。
启动时状态对账
命令的运行状态会持久化到 globalState / workspaceState。但 IDE 退出、崩溃或断电时终端进程已经被杀,上一次写下的 status: "running" 却还留在存储里——下次打开 IDE,面板就是一排假的「运行中」。
更糟的是:菜单把 ^commandRunning 绑到了「停止」按钮上,所以第一次点击只能停、永远停不启,必须「停 → 再启」点两次。
扩展在激活时做一次对账,分两步:
- 关掉所有
[Launcher] … 开头的遗留终端。开着 terminal.integrated.enablePersistentSessions 时,VS Code 会把上一轮的终端恢复回来,但本扩展重启后已经不再跟踪它们——留着就是一堆没人管的孤儿 shell。
- 凡是标记为「运行中」的命令,一律打回「已停止」;批量父命令会跟着子命令一起推进。
不做「终端是否还活着」的判定:恢复回来的终端本来就不该保留,想开重新点一次命令即可。对账在树面板创建之前完成,因此第一帧就是正确状态,不会闪一下假「运行中」。
正常关闭 IDE 时(deactivate)也会按同样的前缀规则把终端关掉,让持久化没东西可恢复。但这一层只是第二道防线——崩溃 / 强杀 / 断电不会执行 deactivate(),真正兜底的是启动时的对账。
自动关闭终端
pnpm install、npm run build 这类一次跑完的命令结束后,终端会自动关闭。
- 成功(退出码
0) → 自动关闭终端,命令状态变为「已停止」。
- 失败(退出码非
0) → 保留终端,命令状态变为「错误」,并弹出警告提示退出码——报错信息在终端里,关掉等于让人重跑一遍。
- dev server 这类常驻命令 → 右键 → 编辑命令,最后一步选择「始终保留终端」,或在设置里把
commandLauncher.autoCloseTerminal 关掉。
依赖 shell integration。 本功能基于 VS Code 的 shell integration 获取真实退出码,因此要求:
- VS Code 版本 ≥ 1.95;
- 终端 profile 使用受支持的 shell(PowerShell 需 pwsh 7+,bash / zsh / fish)。Windows PowerShell 5.1 不受支持;
terminal.integrated.shellIntegration.enabled 未被关闭。
三者任一不满足时,命令照常运行,但拿不到结束事件,终端会一直保留(即本功能静默不生效)。
在终端里执行 Get-Command -Name "*VSC*" -CommandType Function,有输出才说明集成脚本注入成功。
快捷键
本扩展为高频操作绑定了默认快捷键,可在 VS Code 的 键盘快捷方式 设置(Ctrl+K Ctrl+S / macOS Cmd+K Cmd+S)中搜索 Command Launcher 查看和修改。
默认快捷键
| 快捷键 |
macOS |
命令 |
说明 |
Ctrl+Shift+R |
Cmd+Shift+R |
commandLauncher.quickStart |
打开快速启动面板 |
Ctrl+Shift+Q |
Cmd+Shift+Q |
commandLauncher.stopAll |
停止所有运行中的命令 |
Ctrl+Shift+L |
Cmd+Shift+L |
commandLauncher.search |
搜索命令 |
其他可绑定的命令 ID
| 命令 ID |
说明 |
commandLauncher.scanPackageJson |
重新导入 package.json(差异同步) |
commandLauncher.refresh |
刷新命令列表 |
commandLauncher.addCommand |
添加命令 |
commandLauncher.addBatchCommand |
添加批量启动配置 |
数据迁移
从旧版本(无 scope 字段)升级时,扩展会自动将旧数据迁移为全局命令(scope: "global"),并清除旧的存储键,无需手动干预。
开发
# 安装依赖
npm install
# 开发编译(含 sourcemap)
npm run compile
# 监听模式
npm run watch
# 生产构建
npm run package
# 打包 VSIX
npx vsce package
License
MIT