3

我正在尝试为我所有的作曲家包设置我自己的满足服务器。许多包都依赖于 phpunit 或 phpmd 之类的东西。我想在我的满意中创建所有这些依赖项的档案。但 satis 仅从给定的存储库创建档案,不包括依赖项。

知道如何解决这个问题吗?

这是我的 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
  }
}
4

3 回答 3

2

没有简单的方法可以使用 Satis 获取私有存储库的所有包版本并镜像所有依赖项。

这是因为在某些时候镜像最终会尝试获取Packagist的全部内容。

要在 Satis 中镜像包的所有依赖项,您可以选择两种不同的方法:

A)添加存储库源并需要所有自己的包

Satis 默认禁用与 Packagist 的连接。因此,您必须将 Packagist 添加为存储库。如果您在不需要特定版本的包的情况下添加存储库,那么 Satis 将切换到 »require-all« 模式(“未定义显式要求,启用 require-all”)。然后,这将尝试获取存储库的所有包版本以及 Packagist 上的所有包版本。繁荣。这将失败。所以需要特定的包来防止 »require-all« 模式。

  1. 添加您的存储库
  2. 设置需要依赖项 ( require-dependencies: true, require-dev-dependencies: true)
  3. 添加 Packagist 作为存储库源(Satis 默认禁用 packagist.org)
  4. 禁用require-all标志
  5. 要求所有您自己的软件包以避免 Satis 切换到 »require-all« 模式

所以你的 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

顺便说一句:从多个存储库中获取所有这些依赖项可能会导致内存限制错误。Composer 建议在运行 Satis 时提高内存限制,如下所示:

php -d memory_limit=2GB ./bin/satis build satis.json web

B) 安装两个 Satis 实例 - 一个四个您自己的包,一个镜像所有依赖项

如果您的存储库中有很多包,但只有几个依赖项,那么此方法将为您节省一些时间来写下需求(例如,您公司中有 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. 将 Packagist 添加为存储库
  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

于 2017-06-13T10:56:22.970 回答
1

您可以从以下位置列出所有包(包括嵌套依赖项)composer.lock

grep "\"name\":.*/.*" composer.lock 
于 2016-01-26T09:58:59.587 回答
0

当 Satis 搜索包时,它会尝试从列出的存储库中解析所有需要的包。只需在您的satis.json.

(也可能是一个错误,因为手动定义依赖项是乏味的并且违反了require-dependencies指令。考虑在 Satis 问题跟踪器上报告它。)

于 2016-01-26T09:50:21.873 回答