ros2-quick-runner插件v0.0.4版本发布
🎯 本次改动的核心目标
让colcon build也能像 launch/run 一样右键一键搞定。
✨ 新增功能:colcon build 右键菜单
改了什么
在任意文件夹上右键,新增了colcon build按钮。
期望的行为
| 右键位置 | 终端路径 | 执行的命令 |
|---|---|---|
xxx_ws/ | xxx_ws/ | colcon build |
xxx_ws/src/ | xxx_ws/ | colcon build |
xxx_ws/src/pkg_a/ | xxx_ws/ | colcon build |
但是如果是在工作空间的上级目录右键,虽然也会出现colcon build按钮,但是运行后右下角会报错找不到工作空间。
简单说:一般来说,你只需要在你工作空间下面的文件夹右键运行,最终都在工作空间根目录执行编译。
🐛 更新内容
增强findRos2Workspace函数
之前只判断同时有src/和install/,现在分两级判断:
// 优先:同时有 src/ 和 install/(已编译,最准确)if(fs.existsSync(srcPath)&&fs.existsSync(installPath)){returncurrentDir;}// 兜底:只有 src/,但 src/ 下有包含 package.xml 的子目录(未编译)if(fs.existsSync(srcPath)){constitems=fs.readdirSync(srcPath);consthasPackage=items.some(item=>{constitemPath=path.join(srcPath,item);returnfs.statSync(itemPath).isDirectory()&&fs.existsSync(path.join(itemPath,'package.xml'));});if(hasPackage)returncurrentDir;}这样未编译的工作空间也能正确识别。
增加isWorkspaceRoot严格判断
functionisWorkspaceRoot(dirPath){constsrcPath=path.join(dirPath,'src');if(!fs.existsSync(srcPath))returnfalse;constitems=fs.readdirSync(srcPath);returnitems.some(item=>{constitemPath=path.join(srcPath,item);returnfs.statSync(itemPath).isDirectory()&&fs.existsSync(path.join(itemPath,'package.xml'));});}不能只看有没有src/,必须看src/下的子目录是否包含package.xml!
这避免了被包内的src/子目录误判。比如xxx_ws/src/pkg_a/src,修复前在pkg_a目录右键,就会在pkg_a这个目录进行colcon build,但是修复后会在xxx_ws目录进行colcon build。
📝 经验总结
- 此次更新最主要的功能就是添加
colcon build功能,具体原因可以和ros2的编译结果有关,正是由于ros2的特性(详细原因可以看我上期文章),修改代码后需要重新编译,那么colcon build就变成了和source install/setup.bash使用频率差不多的命令,如果自己手敲,会比较费时间(我自己在复现项目的过程中体会到了,当你每改一点,然后git存档,然后你要看看能否跑起来,你就需要编译,然后运行,手敲确实繁琐) - 这次更新比较突然,我也只是做了一些测试,但是由于每个人的项目不同,代码架构可能存在不同,因此我目前也排查不出问题,只能尽可能的模拟多种情况。(欢迎大家体验,提出问题,目前已经有73人下载安装)
🎁 最终效果
| 场景 | 行为 |
|---|---|
右键xxx_ws/ | ✅ 直接 build |
右键xxx_ws/src/ | ✅ 上一级 build |
右键xxx_ws/src/pkg_a/ | ✅ 自动向上找,build |
| 工作空间未编译 | ✅ 也能正确识别 |
包内src/子目录 | ✅ 不会被误判 |
GitHub:
https://github.com/Knighthood2001/vscode-ros2-quick-runner
版本:v0.0.4
发布日期:2026-06-10
