满意,如何存档需要依赖关系



我正在尝试为所有作曲家软件包设置自己的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 上的所有软件包版本。繁荣。这将失败。因此,需要特定的包来防止"全部要求"模式。

  1. 添加存储库
  2. 设置需要依赖(require-dependencies: truerequire-dev-dependencies: true
  3. 添加 Packagist 作为存储库源(默认情况下,Satis 禁用 packagist.org)
  4. 禁用require-all标志
  5. 需要您自己的所有软件包,以避免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 个第三方软件包的依赖项)。

  1. 添加存储库
  2. 设置 »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 实例中手动添加。

  1. 添加另一个 Satis.json 以镜像所有依赖项
  2. 添加包装师作为存储库
  3. 仅需要所有所需的依赖

这个 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 问题跟踪器上报告它。

相关内容

  • 没有找到相关文章

最新更新