开发工具构建工具【免费下载链接】swift-package-managerThe Package Manager for the Swift Programming Language项目地址https://gitcode.com/gh_mirrors/sw/swift-package-manager点击查看免费下载swift package show-dependencies是 Swift Package ManagerSwiftPM提供的依赖可视化命令用于将解析完成resolved的依赖图以文本、JSON、Graphviz DOT 或扁平列表形式打印出来。在排查依赖版本冲突、确认产物来源、生成 CI 审计报告或绘制依赖关系图等场景中它是开发者的第一视角工具。读完本文你将掌握该命令的全部输出格式、每个命令行选项的含义与适用场景并了解它在 SwiftPM 源码中的底层实现与对应测试。命令概览它做什么从哪里来命令的全量语法如下选项按原样继承自 命令参考文档package show-dependencies [--package-pathpackage-path] [--cache-pathcache-path] [--config-pathconfig-path] [--security-pathsecurity-path] [--scratch-pathscratch-path] [--swift-sdks-pathswift-sdks-path] [--toolsettoolset...] [--pkg-config-pathpkg-config-path...] [--enable-dependency-cache] [--disable-dependency-cache] [--enable-build-manifest-caching] [--disable-build-manifest-caching] [--manifest-cachemanifest-cache] [--enable-experimental-prebuilts] [--disable-experimental-prebuilts] [--verbose] [--very-verbose|vv] [--quiet] [--color-diagnostics] [--no-color-diagnostics] [--disable-sandbox] [--netrc] [--enable-netrc] [--disable-netrc] [--netrc-filenetrc-file] [--enable-keychain] [--disable-keychain] [--resolver-fingerprint-checkingresolver-fingerprint-checking] [--resolver-signing-entity-checkingresolver-signing-entity-checking] [--enable-signature-validation] [--disable-signature-validation] [--enable-prefetching] [--disable-prefetching] [--force-resolved-versions|disable-automatic-resolution|only-use-versions-from-resolved-file] [--skip-update] [--disable-scm-to-registry-transformation] [--use-registry-identity-for-scm] [--replace-scm-with-registry] [--default-registry-urldefault-registry-url] [--configurationconfiguration] [--Xcc...] [--Xswiftc...] [--Xlinker...] [--Xcxx...] [--tripletriple] [--sdksdk] [--toolchaintoolchain] [--swift-sdkswift-sdk] [--sanitizesanitize...] [--auto-index-store] [--enable-index-store] [--disable-index-store] [--enable-parseable-module-interfaces] [--jobsjobs] [--use-integrated-swift-driver] [--explicit-target-dependency-import-checkexplicit-target-dependency-import-check] [--build-systembuild-system] [--debug-info-format] [--enable-dead-strip] [--disable-dead-strip] [--disable-local-rpath] [--formatformat] [--output-pathoutput-path] [--version] [--help]在 SwiftPM 源码中该子命令在 SwiftPackageCommand.swift 中通过ShowDependencies.self注册为swift package的顶级子命令其核心实现位于 ShowDependencies.swift。命令声明为struct ShowDependencies: AsyncSwiftCommand { static let configuration CommandConfiguration( abstract: Print the resolved dependency graph., ... ) }其执行流程非常简单直接run(_:)中先调用swiftCommandState.loadPackageGraph()加载并解析出完整的依赖图ModulesGraph随后根据--format选择对应的 dumper把以根包为起点的依赖树写入标准输出或--output-path指定的文件。这意味着它打印的永远是解析后的依赖状态——版本锁定结果来自Package.resolved与依赖解析器的共同作用。四种输出格式text / json / dot / flatlist--formatformat决定输出格式默认值为text。格式类型定义于 ShowDependencies.swift 的ShowDependenciesMode枚举支持text、dot、json、flatlist四种取值不区分大小写。四种格式分别由 DependenciesSerializer.swift 中的四个 dumper 实现。text默认PlainTextDumper输出一棵使用 Unicode 树形连线符绘制的依赖树。根包自身以.表示每个依赖节点格式为identitypackageLocationversion(traits: ...)identity包的标识identitypackageLocation包的来源地址Git URL 或本地路径version解析到的版本号若没有版本信息例如本地路径依赖则显示unspecified括号中的traits部分仅在包启用了 traits 时才出现。当根包没有任何外部依赖时输出No external dependencies found。连线规则与常见树形工具一致父节点非最后一个子节点用├──与│最后一个子节点用└──与空格缩进。jsonJSONDumper输出一个嵌套的 JSON 对象默认 pretty-print 缩进每个包节点包含以下字段字段含义identity包的标识字符串name包的显示名manifest 中的名称url包来源地址version解析到的版本无版本信息时为unspecifiedpath包在本地文件系统中的绝对路径traits该包启用的 traits 数组dependencies递归嵌套的依赖数组JSON 输出从根包开始完整递归非常适合程序化消费例如在 CI 中做依赖审计。dotDotDumper输出 Graphviz DOT 语言描述的依赖图可以直接交给dot命令渲染成可视化图片。输出以digraph DependenciesGraph {开头、以}结尾节点统一为shape box。每个节点标签包含三行identity、来源 URL、版本号每条边以rootURL - dependencyURL形式描述。dumper 内部用两个集合分别对已打印节点与已打印边做去重保证同一依赖只出现一次。若没有外部依赖同样输出No external dependencies found。flatlistFlatListDumper输出最简形式逐行打印依赖的 identity并递归展开其直接依赖不做树形连线、不显示版本与 URL。适合快速核对“当前到底引入了哪些包”。把结果写入文件--output-path默认情况下命令结果输出到 stdout。通过--output-pathoutput-path可以指定一个绝对或相对路径将依赖图写入该文件同时它还提供了短选项-o见 ShowDependencies.swift 中Option(name: [.long, .customShort(o)]的定义。源码中输出流的选择逻辑为let stream: OutputByteStream try outputPath.map { try LocalFileOutputByteStream($0) } ?? TSCBasic.stdoutStream即传了--output-path就写入文件否则写 stdout。这在 PackageCommandTests.swift 中有对应测试show-dependencies --format json --output-path result.json会生成result.json文件且内容中name为root、dependencies[0].name为dep。全量选项参考原命令文档对每个选项都有说明下面按功能域归类整理并补充源码层面的佐证。工作目录与路径定位--package-pathpackage-path指定要操作的包路径默认是当前目录。该选项会先于任何其他操作改变工作目录即先切到目标包目录再执行解析。--cache-pathcache-path指定共享缓存目录路径依赖缓存、manifest 缓存等统一存放的位置。--config-pathconfig-path指定共享配置目录路径。--security-pathsecurity-path指定共享安全目录路径存放指纹、签名等安全相关数据。--scratch-pathscratch-path指定自定义的 scratch构建中间产物目录默认是.build。--swift-sdks-pathswift-sdks-path指向存放已安装 Swift SDK 的目录。工具链与编译环境--toolsettoolset指定构建目标平台时要使用的 toolset JSON 文件。该选项可多次使用以指定多个 toolset它们会按指定顺序合并为一个最终 toolset 用于当前构建。--pkg-config-pathpkg-config-path指定额外的 pkg-config.pc文件搜索路径可多次使用以指定多个路径。--tripletriple目标平台三元组如x86_64-unknown-linux-gnu、arm64-apple-macosx。原文档未给出详细描述从其命名可以推断用于覆盖默认目标平台。--sdksdk指定使用的 SDK。原文档未给出描述用途可从命名推断为覆盖系统默认 SDK。--toolchaintoolchain指定使用的工具链。原文档未给出描述用途可从命名推断为覆盖系统默认工具链。--swift-sdkswift-sdk过滤器用于选择构建时使用的特定 Swift SDK。--jobsjobs构建过程中并行派生的任务job数量。依赖缓存与清单缓存--enable-dependency-cache|--disable-dependency-cache拉取依赖时是否使用共享缓存对 fetch 依赖启用的开关。--enable-build-manifest-caching|--disable-build-manifest-caching构建 manifest构建清单缓存的启用/禁用开关。原文档未给出描述从其命名可推断为控制构建清单缓存行为。--manifest-cachemanifest-cachePackage.swift 清单的缓存模式合法取值为shared共享缓存、local包的构建目录内、none禁用。宏预编译实验性--enable-experimental-prebuilts|--disable-experimental-prebuilts是否使用预编译的 swift-syntax 库来构建宏macro。这是实验性特性对应--experimental-prebuilts实验标记。沙箱与网络凭证--disable-sandbox执行子进程时禁用沙箱。--netrc即使在其他凭证存储更优先的情况下也使用 netrc 文件。--enable-netrc|--disable-netrc是否从 netrc 文件加载凭证。--netrc-filenetrc-file指定 netrc 文件路径。--enable-keychain|--disable-keychain是否在 macOS keychain 中搜索凭证。安全校验解析器级--resolver-fingerprint-checkingresolver-fingerprint-checking原文档未给出详细描述从其命名可以推断为控制依赖解析器对包指纹fingerprint的校验策略级别。--resolver-signing-entity-checkingresolver-signing-entity-checking原文档未给出详细描述从其命名可以推断为控制依赖解析器对包签名实体signing entity的校验策略级别。--enable-signature-validation|--disable-signature-validation是否校验从注册表registry下载的已签名包 release 的签名。依赖解析与版本锁定--enable-prefetching|--disable-prefetching原文档未给出描述从其命名可推断为控制依赖解析过程中是否启用预取prefetch以加速解析。--force-resolved-versions|--disable-automatic-resolution|--only-use-versions-from-resolved-file只使用Package.resolved文件中的版本若该文件已过期out-of-date则解析失败。这是--disable-automatic-resolution的增强别名常用于保证可复现构建。--skip-update解析过程中跳过从远端更新依赖。--disable-scm-to-registry-transformation禁用源码控制SCM到注册表registry的转换。--use-registry-identity-for-scm在注册表中查找源码控制依赖尽可能使用其注册表身份帮助跨两种来源去重。--replace-scm-with-registry在注册表中查找源码控制依赖尽可能用注册表而非源码控制来获取它们。--default-registry-urldefault-registry-url使用默认注册表 URL替代registries.json配置文件。构建参数透传--configurationconfiguration以指定的构建配置如debug、release构建。--Xcc...把标志透传给所有 C 编译器调用。--Xswiftc...把标志透传给所有 Swift 编译器调用。--Xlinker...把标志透传给所有链接器调用。--Xcxx...把标志透传给所有 C 编译器调用。--debug-info-format指定使用的调试信息格式Debug Information Format。--sanitizesanitize开启针对错误行为的运行时检查可选值为address、thread、undefined、scudo。--enable-dead-strip|--disable-dead-strip启用/禁用链接器的死代码剥离dead code stripping。--disable-local-rpath禁用默认添加$ORIGIN/loader_path到 rpath。--auto-index-store|--enable-index-store|--disable-index-store启用/禁用边构建边索引indexing-while-building功能。--enable-parseable-module-interfaces原文档未给出描述从 SwiftPM 的既有能力可推断为生成可解析的模块接口.swiftinterface以支持跨模块增量编译。--use-integrated-swift-driver原文档未给出描述从 SwiftPM 的既有能力可推断为使用集成的 Swift 驱动integrated driver而非外部 driver。--explicit-target-dependency-import-check...指示本次构建检查目标是否只 import 其显式声明的依赖。--build-systembuild-system原文档未给出描述从 SwiftPM 的BuildSystemProvider可推断为选择构建系统native / swiftbuild / xcode。日志与输出控制--verbose提高输出冗余度包含信息级informational输出。--very-verbose别名--vv提高输出冗余度到调试级debug输出。--quiet降低输出冗余度仅包含错误级输出。--color-diagnostics|--no-color-diagnostics启用/禁用打印到 TTY 时的彩色诊断。默认行为连接 TTY 时启用彩色诊断否则禁用。--formatformat设置输出格式见上文四种格式。--output-pathoutput-path将依赖图输出到指定绝对/相对路径短选项-o。--version显示版本。--help显示帮助信息。源码级实现原理输出管线从源码看命令实现非常简洁输出职责完全委托给 dumperswitch mode { case .text: dumper PlainTextDumper() case .dot: dumper DotDumper() case .json: dumper JSONDumper() case .flatlist: dumper FlatListDumper() } dumper.dump(graph: graph, dependenciesOf: rootPackage, on: stream) stream.flush()其中rootPackage取graph.rootPackages的第一个元素graph.directDependencies(for:)用于逐层获取每个包的直接依赖ModulesGraph则承载了完整的解析结果。JSON 字段的来源JSON dumper 中每个字段都能回溯到ResolvedPackage的 manifest 信息identity来自package.identityurl来自package.manifest.packageLocationversion来自package.manifest.version无版本时为unspecifiedpath来自package.path.pathStringtraits来自package.enabledTraits。这意味着 JSON 输出同时包含了逻辑身份identity、来源url与物理位置path三重信息便于审计脚本对齐其他工具如swift package dump-package的输出。与 traits 的联动从 PackageCommandTests.swift 的测试可以看出show-dependencies 的输出会反映 traits 的启用状态启用 traits 时text 输出中会出现(traits: Package3Trait3)这样的后缀JSON 的traits数组会列出所有启用的 trait使用--disable-default-traits且没有其他 trait 被启用时输出变为No external dependencies found使用--traits EnablePackage2Dep切换 trait 后输出中的依赖集合随之改变使用--enable-all-traits时所有 trait 及其依赖全部出现。这说明 show-dependencies 展示的是当前 trait 配置生效后的解析结果是验证 traits 与条件依赖.when(platforms:...)/.when(usage:...)是否正确生效的快捷方式。与依赖解析状态的强绑定命令内部通过loadPackageGraph()走完整解析流程因此它的输出必然受解析器行为影响--force-resolved-versions仅用Package.resolved中的版本且过期即失败、--skip-update不从远端更新、--use-registry-identity-for-scm/--replace-scm-with-registrySCM 与注册表身份互操作等解析器级选项都会反映到最终的图中。测试验证命令行为有据可查除上文提到的 traits 测试与--output-path测试外PackageCommandTests.swift 中的showDependencies测试使用Fixtures/DependencyResolution/External/Complex夹具示例包验证text 输出中包含FisherYates1.2.3即 identity 版本号格式正确JSON 输出可被解析为字典顶层name为Dealerpath解析后与包根目录一致。在 DependencyResolutionTests.swift 中还有使用show-dependencies -v的端到端依赖解析验证。这些测试共同锁定了命令的输出契约也意味着你在本地可以用同一夹具复现# 在仓库内查看示例包的依赖 swift package --package-path Fixtures/DependencyResolution/External/Complex/app show-dependencies实战要点小结快速排障swift package show-dependencies直接展示“实际生效”的依赖版本排查版本漂移时优先使用它而不是读Package.resolved。可复现构建配合--force-resolved-versions等价于--only-use-versions-from-resolved-file可强制只使用已锁定版本Package.resolved过期即报错。CI 审计用--format json --output-path dep.json将依赖快照落盘供后续 diff 或合规扫描。可视化--format dot生成的 DOT 文件可直接交给 Graphviz 渲染依赖关系图。离线/受限网络按需组合--skip-update、--disable-sandbox、--netrc-file与--default-registry-url等选项控制依赖获取来源与凭证方式。注意输出对象的粒度show-dependencies 输出的是包级依赖图而非 target/module 级依赖查看模块级依赖关系需借助其他工具如swift build --show-dependencies或 PIF 相关命令。赞分享开发工具构建工具【免费下载链接】swift-package-managerThe Package Manager for the Swift Programming Language项目地址https://gitcode.com/gh_mirrors/sw/swift-package-manager点击查看免费下载相关推荐SwiftPM swift package resolve 命令完全指南依赖解析、Package.resolved 与安全校验SwiftPM swift package resolve 命令完全指南依赖解析、Package.resolved 与安全校验 swift package r开发工具构建工具SwiftPM 包集合Package Collections完全指南swift package-collection 命令详解SwiftPM 包集合Package Collections完全指南 swift package collection 命令详解 swift packag开发工具构建工具SwiftPM swift package show-executables 命令完全指南列出包内所有可执行产物SwiftPM swift package show executables 命令完全指南列出包内所有可执行产物 导读 swift package show开发工具构建工具上一篇地理热力图终极指南5分钟快速掌握空间数据可视化下一篇Pythia-160M-deduped-openmind部署实战生产环境最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考