我能否将packagist.org上的依赖项与我的Composer Satis安装同步或镜像?

18
我们有自己的Satis存储库,可以在其中存储我们自己的依赖项。这很好用。
但如果开发人员使用的包不在我们自己的存储库中,则Composer将通过packagist.org(作为后备)从GitHub获取它。
但我们不想依赖于packagist.org。所有依赖项都应从我们自己的存储库下载。
我们想知道的是,是否可能让Satis从Packagist下载软件包(如果尚未本地可用),然后自动将其存储并添加到Satis自己的存储库中。
这样一来,我们就不必手动将依赖项添加到Satis存储库中了。

Packagist仅存储包元数据。实际的源代码来自存储库(通常为GitHub)。我猜你可以浏览Composer源代码,了解他们如何列出软件包并下载元数据。 - Tivie
2个回答

17

Satis现在已支持此功能。

只需按照Satis设置说明操作,并将以下内容添加到您的配置文件中(默认情况下命名为satis.json)。根据需要更新prefix-url和require。

{
    "repositories": [
        { "type": "composer", "url": "https://packagist.org" }
    ],
    "require-dependencies": true,
    "require": {
        {{your application dependencies from composer.json}}
    },
    "archive": {
        "directory": "dist",
        "prefix-url": "{{your server}}",
        "skip-dev": true
    }
}

然后,您可以像通常一样创建自己的Satis仓库:

php bin/satis build <configuration file> <build dir>

现在,您的 Satis 存储库将满足您应用程序的所有依赖项。


注意:第一次运行可能需要一些时间。后续运行会快得多。另外,请注意,Satis 使用 /tmp 目录作为其缓存目录。在一个内存较小、/tmp 由 tmpfs 支持的系统上,如果您有一个大的依赖树,则可能需要增加 /tmp 可用的空间。

您还可以希望在项目的 composer.json 文件中禁用 Packagist 存储库,以强制所有依赖关系都来自于您的 Satis 存储库。要做到这一点,请添加:

{
    "repositories": [
        {
            "packagist": false
        }
    ]
}

将以下代码添加到您项目的composer.json文件中。


感谢您的评论!但是,如果使用这种配置,当Satis实例归档所有依赖项(例如php bin/satis build)时,它仍然会使您的Satis实例依赖于Packagist吗?因此,如果在运行php bin/satis build时Packagist.org出现故障,它将不知道每个依赖项的位置。当然,这意味着手动维护repositories中所有规范存储库URL的列表,但这是独立性的代价。或者我有什么遗漏的地方吗? - John Kary
你说得没错,但这并不是什么大问题,因为如果Packagist宕机了,你仍然拥有上一次Satis运行期间拉取的所有依赖项。实际上,在正常的开发和生产过程中,当你正在积极更改你的依赖关系并使用完全满足的依赖镜像时,我认为你会遇到(并解决)任何外部问题(比如Packagist不可用)。 - rynemccall
这里的问题是你仍然需要手动添加所有依赖项。如果你有一个 git 存储库,你可以直接添加它,但该存储库中所需的项目依赖项不会自动加载,这需要大量的手动工作。 - Lars

6

您现在可以使用Broker来实现此功能。很可能这个功能将在未来被添加到Satis本身中。


2
注意:该项目不再积极维护。由于satis现在支持类似的功能,您应该改用satis - MPV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接