mcpField
P
pub-package-explorer

pub-package-explorer

github.com/hexsis-llc开发172 次安装1 周前更新
代码仓库

关于 pub-package-explorer

用于检查 Dart 或 Flutter 包源码的工作流,也支持尚未加入项目依赖的包。它可从 package_config.json 定位已安装包,或使用 dart pub unpack 下载源码。

主要功能

  1. 01定位已安装包路径
  2. 02检查包源码文件
  3. 03添加依赖前解包
  4. 04处理指定包版本
  5. 05指导缺少配置时的恢复

适用场景

  1. 01检查依赖包的公开 API
  2. 02添加包前审阅源码
  3. 03核对项目解析的包版本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/hexsis-llc/skills --skill pub-package-explorer

安装后在 Claude Code 中输入/pub-package-explorer确认已加载。

详细介绍

Pub 包资源浏览器

使用此工作流读取 Dart 或 Flutter 包的源代码,包括项目中当前未安装的包。

选择源码策略

  1. 如果包已在项目依赖关系图中,优先使用 .dart_tool/package_config.json。
  2. 如果包不在 package_config.json 中,或需要在添加依赖前检查源码,请使用 dart pub unpack。
  3. 如果两种方式都可用,优先使用已安装的包路径,以匹配项目解析出的版本。

解析包源码路径

  1. 确认项目包含 .dart_tool/package_config.json。
  2. 按 name 从 packages[] 中读取包条目。
  3. 提取:
  • rootUri(包根目录,通常位于 pub 缓存中)
  • packageUri(通常为 lib/)
  1. 将 rootUri 与 packageUri 拼接,生成源码路径。
  2. 读取文件前,将 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