【问题标题】:Satis Private Repository - satis.json structureSatis Private Repository - satis.json 结构
【发布时间】:2016-03-12 02:53:30
【问题描述】:

编辑

我想我误解了satis,现在这是我的新理解,如果我错了,请纠正我:

在 satis.json 中,我必须指定我要镜像的包的 url,例如,学说 git repo、yaml git repo... 然后 satis 将所有这些包镜像到我的服务器上。这意味着我需要将项目的 composer.json 中使用的所有包添加到 satis json(大约 20 个包/要求)。现在,我可以将我的私有 satis 存储库添加到我的项目的 composer.json 文件中,并且在运行“composer update”时,它将首先在 satis 镜像包中查找所需的包。我理解正确吗?

情况:

我正在尝试将 Satis 用于私人作曲家存储库。我在 github 上有一个私人项目,用于我的网站。在项目中,我使用的是 composer,因此我在项目的根目录上有一个 composer.json。它看起来如下:

{
   "name": "Peter North",
   "license": "proprietary",
   "type": "project",
   "autoload": {
      "psr-4": {
        "": "src/"
      }
   },
   "require": {
      "php": ">=5.3.9",
      "symfony/http-foundation": "dev-master"
   }
   ...
}

现在我想使用我的私有 url 满足存储库:packages.ait.company,在 apache 上运行并且到目前为止可以访问。 satis.json 如下所示:

{
   "name": "AIT Company",
   "homepage": "packages.ait.com",
   "repositories": [
       {
           "type": "vcs",
           "url": "git@github.com:north/ait.git" // this is the url of my private github project
       }
   ],
   "require-all": true,
   "require-dependencies": true,
   "archive": {
       "directory": "dist",
       "format": "tar",
       "skip-dev": true
   }
}

我认为我不太了解如何构建 satis.json 文件以及它需要包含什么,因为我尝试的方式是它不会下载“php”和“symfony/http-foundation”包我在 composer.json 文件中指定 - 尽管它确实将项目的正确 composer.json 文件下载到 /satis/include 目录 json 文件中。

当我想从 github 读取我的项目的 composer.json 并构建“需要条目”的私有 satis 存储库时,satis.json 应该是什么样子?

【问题讨论】:

    标签: php git symfony composer-php satis


    【解决方案1】:

    在我的 Satis 更新脚本中,从外部包和内部私有存储库创建本地副本是一个两步过程。

    第一步只下载外部依赖的元数据,放到一个中间的satis仓库中。配置明确地不“全部要求”,但明确声明所有正在使用的包(以及一些可能使用过的,或过去曾使用过的)带有开放式版本通配符,即"symfony/console":">=2.4" (没有波浪号或插入符号 - 我想在这里获得主要版本更新)。添加require-dependencies:true 会扫描所有所需包的所有依赖项,并将它们也添加到元数据集合中。

    结果存储在“外部”目录中。

    第二步负责扫描内部“存储库”中的所有包,并从中创建档案。这显然是所有私有存储库的列表,但诀窍是:您还可以将“composer”类型的存储库添加到satis.json - 这是我将外部存储库与来自外部包的元数据添加的地方。在此处添加它会将所有外部包的版本添加到需要创建 ZIP 文件的版本列表中。

    第一次运行它需要很长时间,因为需要下载所有包(并从私有存储库本地创建)。之后运行它只是对以前未创建的新版本的增量更新。

    关键是在一个 Satis 文件中配置收集没有 ZIP 和明确版本范围的外部包(“*”作为版本可以工作,但只有在您确实需要所有版本时才使用它),然后将生成的存储库添加到第二个 Satis 配置。您不能将这两个操作(仅创建选定外部依赖项的 ZIP 以及所有内部存储库的 ZIP)组合到一个 Satis 运行中。

    另一个提示:您可能只想创建外部依赖项的本地副本,以避免在部署到生产环境(或正在开发并需要更新)时遇到 Github 中断。为了确保每个使用的依赖项都在我的 Satis 中,我将 Satis 存储库添加到每个 composer.json"packagist":false,以关闭与 Packagist 的任何直接联系。你不能只是添加一个随机包,它必须首先在你的本地 Satis 存储库中。

    【讨论】:

    • 哇!非常感谢这个完美的解释。现在都在工作! :-) 我还有一个问题:我在我的 satis.json 文件“symfony/symfony”的“require”部分中指定了“symfony/symfony”:>=2.3。此语句确实下载所有版本,而不仅仅是“>2.3”。如果我输入“symfony/symfony”:">=v2.3",它只会下载版本">=2.3"。问题是,一些存储库并不总是使用相同的名称约定,有时它们有“v.2.x”,有时它们只使用“2.x”。 Satis 不会自动添加/删除丢失的“v”字母,然后它只会下载所有版本。我怎样才能避免这种情况?再次感谢!
    • Satis 在内部使用 Composer,并且 Composer 会清理所有版本标识符 - 因此是否有“v”并不重要。请注意,即使您需要 Symfony 2.3 或更高版本,这也会加载 Symfony 的所有依赖项,如果这些包确实依赖于 Symfony 的早期版本,这些版本也会被加载。版本要求不是绝对过滤器,而是获取您绝对需要的依赖项的初始引导程序。最后,将找到并添加可能在某处允许的每个版本。
    • 也许你也可以帮助我解决这个满意的问题:stackoverflow.com/questions/34167107/…。我会很感激的。问候
    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2017-09-14
    • 2014-10-13
    • 2013-03-25
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多