Satis,如何归档需要依赖?

时间:2016-01-25 07:17:12

标签: php composer-php satis

我正在尝试为我的所有作曲家包设置自己的令人满意的服务器。许多软件包都依赖于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
  }
}

3 个答案:

答案 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«模式。

  1. 添加您的存储库
  2. 设置要求依赖关系(require-dependencies: truerequire-dev-dependencies: true
  3. 将Packagist添加为存储库源(默认情况下Satis禁用packagist.org)
  4. 禁用require-all标记
  5. 要求所有自己的软件包避免Satis切换到»require-all«mode
  6. 所以你的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个依赖项存在于第三方软件包中)

    1. 添加您的存储库
    2. 设置»require-all«以获取存储库中的所有包版本
    3. 这个满意度应该是这样的:

      {
        "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实例中手动添加。

      1. 添加另一个Satis.json以镜像所有依赖项
      2. 将Packagist添加为存储库
      3. 仅需要所有所需的依赖
      4. 这个满意度应该是这样的:

        {
          "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问题跟踪器上报告它。)