我已经在自己的服务器上成功设置了Satis,并且能够从中提取包。
但是,这些私有包中所需的依赖关系经常被克隆到它们的前沿版本而不是指定的版本约束。我认为Satis正在创建最新开发版本的本地镜像。但是我不想拥有本地镜像,我只需要它们直接从Packagist安装。
那么我如何设置项目/包/ Satis以在Packagist安装的私有包中具有依赖关系?
感谢。
这是我的Satis构建文件:
{
"name": "Package Server",
"homepage": "http://packages.URL",
"repositories": [
{
"type": "vcs",
"url": "git@bitbucket.org:USERNAME/REPO.git",
"options": {
"ssh2": {
"username": "USERNAME",
"pubkey_file": "PUBFILE",
"privkey_file": "PRIVATEFILE"
}
}
}
],
"require-all": true
}
这是需要私有包的项目的composer.json文件(包没有标记版本):
{
"name": "Test Project",
"description": "",
"require": {
"php": ">=5.4.0",
"USERNAME/REPO": "*"
},
"repositories": [
{
"type": "composer",
"url": "http://packages.URL"
}
],
"minimum-stability": "dev"
}
这是私人包的composer.json:
{
"name": "USERNAME/RPO",
"description": "",
"require": {
"php": ">=5.4.0",
"illuminate/support": "5.0.*",
"vinkla/hashids": "~1.0"
},
"minimum-stability": "dev"
}
答案 0 :(得分:5)
在您的Satis配置中,您定义了"require-all": true
。
这是默认设置,并选择您定义的存储库中所有软件包的所有版本。
您可以尝试删除"require-all": true
以支持require
部分。
这意味着Satis将只包含这些特定包及其版本,如下所示:
"require": {
"company/packageA": "*",
"company/packageB": "1.2.3",
"company/packageC": "2.0.0"
}
这是在Satis上采摘的樱桃包
因此,如果我理解正确,我需要在require键中添加指定私有存储库中可用的私有包,然后他们自己的依赖项将从Packagist安装?
添加require-dependencies
- 这告诉Satis不仅要镜像“require”部分中指定的包,还要镜像所有依赖项。
请参阅https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#resolving-dependencies
是否可以将多个软件包放在一个已定义的存储库中,或者每个软件包是否都需要在Satis中拥有自己的存储库URL条目?
我认为在一个"type": "vcs"
存储库中不可能有多个包。
使用"type": "composer"
和克隆的包装工具,您可以存储多个存储库。
将http://drupal-composer.org与http://packagist.drupal-composer.org/一起考虑。
{
"repositories": [
{ "type": "vcs", "url": "https://github.com/somewhere/packageA" },
{ "type": "composer", "url": "https://packagist.org" }
],
"require": {
"package/packageA": "somewhere-dev",
"phpunit/phpunit": "*"
},
"require-dependencies": true
}