配置Composer依赖项以将路径用于源,将git用于dist

时间:2019-06-20 16:55:33

标签: git composer-php

我有一个项目使用我的另一个GitHub项目作为依赖项。对于该依赖关系,我对Composer配置有两个要求:

  • 在本地工作时,我需要composer install --prefer-sourcesymlink to my local copy of the dependency,以便可以在依赖项中运行git命令。
  • 构建过程运行时,我需要composer install --prefer-dist直接从GitHub存储库进行安装,而无需符号链接。

以前,我在composer.json中使用以下内容来满足第一个要求:

  "require": {
    "narthur/natlib": "@dev"
  },
  "repositories": [
    {
      "type": "path",
      "url": "../natlib",
      "options": {
        "symlink": true
      }
    }
  ]

经过一些工作,我想到了这个,它可以满足第二个要求:

  "require": {
    "narthur/natlib": "@dev"
  },
  "repositories": [
    {
      "type": "package",
      "package": {
        "name": "narthur/natlib",
        "version": "2019.06.20",
        "dist": {
          "type": "zip",
          "url": "https://github.com/narthur/natlib/archive/master.zip"
        },
        "source": {
          "type": "path",
          "url": "../natlib",
          "reference": "master",
          "options": {
            "symlink": true
          }
        }
      }
    }
  ]

这在CI中效果很好。但是,当我删除本地vendor/目录和composer.lock文件并运行composer install --prefer-source时,出现以下异常:

  

[LogicException]
    下载器“ Composer \ Downloader \ PathDownloader”是dist类型的下载器,不能用于下载软件包narthur / natlib-2019.06.20.0

的源代码

我试图将它们分成两个这样的存储库条目:

{
  "type": "path",
  "url": "../natlib",
  "options": {
    "symlink": true
  }
},
{
  "type": "package",
  "package": {
    "name": "narthur/natlib",
    "version": "2019.06.20",
    "dist": {
      "type": "zip",
      "url": "https://github.com/narthur/natlib/archive/master.zip"
    }
  }
}

这在本地工作,将依赖关系符号链接,但在CI because Composer stops at the first matching repository entry中失败:

  

订单在这里很重要。查找软件包时,Composer将从第一个到最后一个存储库进行查找,并选择第一个匹配项。

如何配置Composer使其表现出自己想要的方式,例如在本地--prefer-source标志将依赖关系符号链接,而在CI中,--prefer-dist标志将引入存储库?

我发现的信息:

1 个答案:

答案 0 :(得分:0)

我意识到我的要求可能是不必要的。由于我的依赖项托管在GitHub上,因此我可以在本地和远程以相同的方式将其拉出,并在其vendor文件夹中对依赖项进行更改,然后从那里推送回GitHub。

这是我现在正在使用的:

  "require": {
    "narthur/natlib": "@dev"
  },
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/narthur/natlib"
    }
  ]

进行此转换时遇到的一个难题是,我最初尝试使用软件包类型的存储库,而不是简单的vcs类型的存储库。由于it caused Composer to ignore the dependency's composer.json file, preventing it from being autoloaded,此操作无效。切换到上面的简单vcs条目后,一切运行正常。