我正在尝试为所有作曲家软件包设置自己的Satis服务器。许多软件包都依赖于phpunit或phpmd之类的东西。我想在我的满意度中创建所有这些依赖项的存档。但是 satis 仅从给定的存储库创建存档,不包括依赖项。
知道我该如何解决这个问题吗?
这是我的满意.json
{
"name": "My satis repository",
"homepage": "http://satis.example.com",
"repositories": [
{
"url": "git@github.com:<user>/<repository>.git",
"type": "vcs"
}
],
"require-all": true,
"require-dependencies": true,
"require-dev-dependencies": true,
"archive": {
"directory": "dist",
"format": "zip",
"skip-dev": true
}
}
你可以列出composer.lock
中的所有包(包括嵌套的依赖项):
grep ""name":.*/.*" composer.lock
没有简单的方法可以使用 Satis 获取私有存储库的所有软件包版本并镜像所有依赖项。
这是因为,在某些时候,镜像最终会尝试获取 Packagist 的全部内容。
要在 Satis 中镜像软件包的所有依赖项,您可以在两种不同的方法之间做出决定:
A) 添加存储库源并需要所有自己的包
默认情况下,Satis与Packagist的连接处于禁用状态。因此,您必须将Packagist添加为存储库。如果您在不需要特定版本的软件包的情况下添加存储库,则 Satis 将切换到 »require-all« 模式("未定义显式要求,启用 require-all")。然后,这将尝试获取存储库的所有软件包版本和 Packagist 上的所有软件包版本。繁荣。这将失败。因此,需要特定的包来防止"全部要求"模式。
- 添加存储库
- 设置需要依赖(
require-dependencies: true
、require-dev-dependencies: true
) - 添加 Packagist 作为存储库源(默认情况下,Satis 禁用 packagist.org)
- 禁用
require-all
标志 - 需要您自己的所有软件包,以避免Satis切换到"全部要求"模式
所以你的satis.json应该看起来像这样:
{
"name": "My satis repository",
"homepage": "http://satis.example.com",
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.org/"
},
"my-repo": {
"url": "git@github.com:<user>/<repository>.git",
"type": "vcs"
}
},
"require": {
"mycompany/package-foo": "^1.1",
"mycompany/package-bar": "*"
},
"require-all": false,
"require-dependencies": true,
"require-dev-dependencies": true,
"archive": {
"directory": "dist",
"format": "zip",
"skip-dev": true
}
}
来源: https://github.com/composer/satis/issues/296
顺便说一句:从多个存储库获取所有这些依赖项可能会导致内存限制错误。作曲家建议在运行 Satis 时提高内存限制,如下所示:
php -d memory_limit=2GB ./bin/satis build satis.json web
B) 安装两个 Satis 实例 - 一个是您自己的软件包,一个用于镜像所有依赖项
如果您的存储库中有很多软件包,但只有几个依赖项,那么此 apprach 将为您节省一些时间来写下需求(例如,您公司中有 100 个软件包,但只有 5 个第三方软件包的依赖项)。
- 添加存储库
- 设置 »require-all« 以获取存储库中的所有软件包版本
这个 satis.json 应该看起来像这样:
{
"name": "My package repository",
"homepage": "http://packages.example.com",
"repositories": {
"my-repo": {
"url": "git@github.com:<user>/<repository>.git",
"type": "vcs"
}
},
"require-all": true,
"archive": {
"directory": "dist",
"format": "zip",
"skip-dev": true
}
}
这不会获取依赖项。这些需要在另一个 Satis 实例中手动添加。
- 添加另一个 Satis.json 以镜像所有依赖项
- 添加包装师作为存储库
- 仅需要所有所需的依赖包
这个 satis.json 应该看起来像这样:
{
"name": "My mirror repository",
"homepage": "http://mirror.example.com",
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.org/"
}
},
"require": {
"acme/some-package-foo": "*",
"johndoe/some-package-bar": "*"
},
"require-all": false,
"require-dependencies": true,
"require-dev-dependencies": true,
"archive": {
"directory": "dist",
"format": "zip",
"skip-dev": true
}
}
请注意,镜像所有依赖项将花费很长时间。
来源: http://tech.m6web.fr/composer-installation-without-github.html
当 Satis 搜索软件包时,它会尝试从列出的存储库中解析所有必需的软件包。只需在您的satis.json
中单独定义它们即可。
(也可能是一个错误,因为手动定义依赖项很乏味并且会破坏 require-dependencies
指令。考虑在 Satis 问题跟踪器上报告它。