我正在尝试为我的所有作曲家包设置自己的令人满意的服务器。许多软件包都依赖于phpunit或phpmd。我想在满意的情况下创建所有这些依赖项的档案。但是只满足于从给定的存储库创建存档,并且不包括依赖项。
知道如何解决这个问题吗?
这是我的satisf.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
}
}
答案 0 :(得分:1)
您可以列出composer.lock
的所有包(包括嵌套依赖项):
grep "\"name\":.*/.*" composer.lock
答案 1 :(得分:1)
没有简单的方法可以使用Satis获取私有存储库的所有包版本,也可以镜像所有依赖项。
这是因为在某些时候镜子最终会尝试获取Packagist的全部内容。
要在Satis中镜像包的所有依赖关系,您可以决定两种不同的方法:
A)添加存储库来源并要求所有自己的包
默认情况下,Satis与Packagist的连接已禁用。所以你必须添加Packagist作为存储库。如果您在不需要特定版本的软件包的情况下添加存储库,那么Satis将切换到»require-all«模式(“无显式要求已定义,启用require-all”)。然后,这将尝试获取存储库的所有包版本以及Packagist上的所有包版本。繁荣。这将失败。因此需要特定的软件包以防止»require-all«模式。
require-dependencies: true
,require-dev-dependencies: true
)require-all
标记所以你的satisf.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
顺便说一句:从多个存储库中获取所有这些依赖项可能会导致内存限制错误。 Composer suggests在运行Satis时提高内存限制,如下所示:
php -d memory_limit=2GB ./bin/satis build satis.json web
B)安装两个Satis实例 - 一个是您自己的一个包,一个是镜像所有依赖项
如果您的存储库中有很多软件包,但只有少数依赖项,那么这个apprach将为您节省一些时间来记下需求(例如,公司中的100个软件包,但只有5个依赖项存在于第三方软件包中)
这个满意度应该是这样的:
{
"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实例中手动添加。
这个满意度应该是这样的:
{
"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
答案 2 :(得分:0)
当Satis搜索包时,它会尝试从列出的存储库中解析所有必需的包。只需在satis.json
。
(也可能是一个错误,因为手动定义依赖关系是繁琐的并且违反了require-dependencies
指令。考虑在Satis问题跟踪器上报告它。)