关于 pub-package-explorer
用于检查 Dart 或 Flutter 包源码的工作流,也支持尚未加入项目依赖的包。它可从 package_config.json 定位已安装包,或使用 dart pub unpack 下载源码。
主要功能
- 01定位已安装包路径
- 02检查包源码文件
- 03添加依赖前解包
- 04处理指定包版本
- 05指导缺少配置时的恢复
适用场景
- 01检查依赖包的公开 API
- 02添加包前审阅源码
- 03核对项目解析的包版本
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hexsis-llc/ skills --skill pub-package-explorer安装后在 Claude Code 中输入/pub-package-explorer确认已加载。
详细介绍
Pub 包资源浏览器
使用此工作流读取 Dart 或 Flutter 包的源代码,包括项目中当前未安装的包。
选择源码策略
- 如果包已在项目依赖关系图中,优先使用
.dart_tool/package_config.json。 - 如果包不在
package_config.json中,或需要在添加依赖前检查源码,请使用dart pub unpack。 - 如果两种方式都可用,优先使用已安装的包路径,以匹配项目解析出的版本。
解析包源码路径
- 确认项目包含
.dart_tool/package_config.json。 - 按
name从packages[]中读取包条目。 - 提取:
rootUri(包根目录,通常位于 pub 缓存中)packageUri(通常为lib/)
- 将
rootUri与packageUri拼接,生成源码路径。 - 读取文件前,将
file://URI 转换为文件系统路径。
使用以下命令模式:
PACKAGE="analyzer"
CONFIG=".dart_tool/package_config.json"
SOURCE_URI="$(jq -r --arg pkg "$PACKAGE" '
.packages[]
| select(.name == $pkg)
| (.rootUri + (if (.rootUri | endswith("/")) then "" else "/" end) + .packageUri)
' "$CONFIG")"
将 URI 转换为本地路径:
SOURCE_PATH="$(printf '%s\n' "$SOURCE_URI" | sed 's#^file://##')"
然后检查该目录下的源文件(rg、ls、cat)。
解包未安装的包
如果包不在 .dart_tool/package_config.json 中,或需要在安装前检查,请使用此方式。
PACKAGE="analyzer" # or "analyzer:7.4.0"
OUTPUT_DIR="/tmp/pub-unpack"
mkdir -p "$OUTPUT_DIR"
dart pub unpack "$PACKAGE" --output "$OUTPUT_DIR"
找到解压后的目录并进行检查:
PACKAGE_NAME="${PACKAGE%%:*}"
UNPACKED_DIR="$(find "$OUTPUT_DIR" -maxdepth 1 -type d -name "${PACKAGE_NAME}-*" | sort | tail -n 1)"
ls "$UNPACKED_DIR"
ls "$UNPACKED_DIR/lib"
rg --files "$UNPACKED_DIR/lib"
注意:
- 即使包不在当前项目的依赖项中,
dart pub unpack也会下载并解压该包。 - 如果输出目录中已存在需要覆盖的解压副本,请使用
--force。 --output用于指定创建<package>-<version>文件夹的位置。
实用变体
- 仅返回包根目录:
jq -r --arg pkg "$PACKAGE" '
.packages[]
| select(.name == $pkg)
| .rootUri
' .dart_tool/package_config.json
- 同时返回根目录和包 URI:
jq -r --arg pkg "$PACKAGE" '
.packages[]
| select(.name == $pkg)
| "\(.rootUri)\t\(.packageUri)"
' .dart_tool/package_config.json
验证与错误处理
- 如果在
package_config.json中找不到匹配的包,请改用dart pub unpack,不要就此停止。 - 如果缺少
.dart_tool/package_config.json,请先解析依赖项(dart pub get或flutter pub get),然后重试。 - 优先从
rootUri与packageUri拼接后的路径读取,因为包 API 从该子路径公开,并不总是从包根目录公开。 - 如果
dart pub unpack失败,请报告确切的失败原因(例如网络访问、描述符无效,或输出路径权限不足)。
评论
支持 Markdown