dependencies - 如何找出 Composer 需要访问哪些 URL 才能加载包?

标签 dependencies composer-php

我在公司代理背后工作,它只允许连接到已定义的 URL 列表。所以我需要与管理员沟通我的应用程序需要哪些 URL。那么,无论哪种情况,都需要访问 https://getcomposer.orghttps://packagist.org。并且很可能还会访问 https://github.com。但是包(依赖项和它们的依赖项,以及它们的依赖项的依赖项等)可能需要进一步的连接。

如何找出给定应用程序(或更好:给定 composer.json)需要哪些连接?

最佳答案

使用最新版本的composer

$ composer --version

Composer version 1.5.1 2017-08-09 16:07:22

假设你已经跑了

$ composer clear-cache

清除本地缓存(否则 composer 将从本地缓存安装而不是从任何地方下载)并且你已经运行

$ rm -rf vendor

清除 vendor 目录(否则不需要安装任何东西),并且假设依赖项是从 dist 安装的,运行

$ composer install -vvv 2>&1 | grep -oP '(?<=Downloading )http(s)?.*'

不过,根据 composer.lock 是否存在,这将产生不同的结果:

composer.lock 存在

composer 具有有关从何处获取哪些依赖项的信息,因此在这种情况下它只会从 GitHub API 下载。

https://api.github.com/repos/symfony/filesystem/zipball/b32a0e5f928d0fa3d1dd03c78d020777e50c10cb
https://api.github.com/repos/symfony/event-dispatcher/zipball/54ca9520a00386f83bca145819ad3b619aaa2485
https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d
https://api.github.com/repos/symfony/debug/zipball/084d804fe35808eb2ef596ec83d85d9768aa6c9d
...

composer.lock 不存在

composer 将首先从 packagist.org 下载元数据:

https://packagist.org/packages.json
http://packagist.org/p/provider-2013%2456386a41dbd41eab668ffb05897f08b3d6976a85f637cecc2b4355a8c747f315.json
http://packagist.org/p/provider-2014%2483b2e5e0311688cd390926bf3970c838fe101b3fdd40a9c8c1717a367b3c87a5.json
http://packagist.org/p/provider-2015%24318fb1f4ae87f2f15840c4dd9113d965a3c6da36a45ba1278caacdf0e4471ea7.json
...

然后从 GitHub API 下载数据

https://api.github.com/repos/symfony/filesystem/zipball/b32a0e5f928d0fa3d1dd03c78d020777e50c10cb
https://api.github.com/repos/symfony/event-dispatcher/zipball/54ca9520a00386f83bca145819ad3b619aaa2485
https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d
https://api.github.com/repos/symfony/debug/zipball/084d804fe35808eb2ef596ec83d85d9768aa6c9d
...

注意

STDERR的输出重定向到STDOUT,因为composer将相关信息以详细模式输出到STDERR

$ composer install -vvv 2>&1 | grep -oP '(?<=Downloading )http(s)?.*'

然后将输出管道传输到 grep,使用 positive lookbehind 匹配所有匹配 http(s)?.* 的内容正在下载

关于dependencies - 如何找出 Composer 需要访问哪些 URL 才能加载包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45926591/

相关文章:

exception - Composer init(新项目)因 Symfony RuntimeException 中止

dependencies - 如何让 SCons 选择性地忽略对自定义构建器的依赖?

c# - ASP.NET MVC(域模型、存储库、Fluent、服务——我项目的结构)

php - 未找到类 'Way\Generators\GeneratorsServiceProvider'

php - 如何在 windows 上使用 composer 运行 phpunit 测试(cmd)

windows - Composer,设置最低下载稳定性

clojure - 我需要尽快修复令人困惑的依赖关系吗?

java - 如果文件不相等,gradle 不更新依赖项

java - ASTParser 和方法之间的依赖关系

amazon-web-services - 带有 Composer 的 AWS PHP SDK - 缺少 sdk.class.php