【问题标题】:How to find out, what URLs Composer will need to access for loading packages?如何找出 Composer 需要访问哪些 URL 才能加载包?
【发布时间】:2018-02-06 04:07:02
【问题描述】:

我正在使用公司代理,它只允许连接到已定义的 URL 列表。所以我需要与管理员沟通,我的应用程序需要哪些 URL。好吧,无论哪种情况,都需要访问https://getcomposer.orghttps://packagist.org。最有可能也是https://github.com。但是包(依赖项及其依赖项,以及它们的依赖项的依赖项等)可能需要进一步的连接。

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

【问题讨论】:

    标签: dependencies composer-php


    【解决方案1】:

    用最新版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 as composerverbose 模式将相关信息输出到STDERR with

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

    然后将输出通过管道传输到grep,使用正向回溯来匹配所有匹配http(s)?.*前面的Downloading

    【讨论】:

      【解决方案2】:

      Composer 仅使用 Github 下载所有依赖项,因此仅允许 github.com 对任何 composer.json 文件都可以。但是,如果您使用任何私有存储库,则还应考虑该存储库的 url。

      【讨论】:

      • 所以我不需要将getcomposer.orgpackagist.org加入白名单?
      • 您还需要将https://packagist.org/packages.json 列入白名单,因为composer 也会尝试从那里下载文件。
      猜你喜欢
      • 2022-10-06
      • 2016-05-29
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2015-06-26
      • 2010-10-02
      相关资源
      最近更新 更多