

新闻资讯
行业动态不能。composer show -P 只显示包名和版本,不包含源地址;可靠方式是解析 composer.lock 中的 dist.url 字段,因它记录安装时实际使用的镜像后直链,但需注意 URL 可能含临时 token 或需认证。
不能。composer show -P 只显示包名和版本,不包含源地址。Composer 本身没有内置命令一键导出所有依赖的下载 URL,因为 URL 取决于包的 dist.url(归档地址)或 source.url(仓库地址),且可能被镜像、重写或禁用(如私有包走 auth.json 认证)。必须结合 composer show --format=json 和解析逻辑手动提取。
composer.lock 是最可靠来源——它记录了安装时实际使用的 dist.url,包括经镜像替换后的地址(如 packagist.phpcomposer.com → repo.packagist.org 的映射已生效)。只需解析 JSON 并过滤掉无 dist 或无 url 的条目:
jq -r '.packages[] | select(.dist and .dist.url) | "\(.name) \(.version) \(.dist.url)"' composer.lock
若未安装 jq,可用 PHP 快速替代:
php -r '
$lock = json_decode(file_get_contents("composer.lock"), true);
foreach ($lock["packages"] as $pkg) {
if (!empty($pkg["dist"]["url"])) {
echo sprintf("%s %s %s\n", $pkg["name"], $pkg["version"], $pkg["dist"]["url"]);
}
}'
因为:
composer show 不返回 URL,只返回 name/version/typecomposer config repos 仅显示配置的仓库源,不反映每个包实际从哪下载(例如某些包可能被 repositories 中的 package 类型硬编码覆盖,或走 dist 镜像而非 repo)"packagist.org": false,其 URL 可能来自 auth.json 或自定义 VCS 配置,show 完全不可见导出的 dist.url 多数是 tarball 直链(如 https://api.github.com/repos/monolog/monolog/zipball/...),但:
auth.json 中的 token 才能访问"dist": null),只能走 source.type + source.url,此时需额外判断并拼接 tag/commit 归档路径(如 https://gitlab.example.com/foo/bar/-/archive/v1.2.3/bar-v1.2.3.tar.gz)