composer:有没有一种方法可以指定软件包存储库的优先顺序?

Jul*_*let 4 php repository composer-php composer.json

我正在使用packagistfiregentovendorName/moduleName上的软件包(Magento扩展名)。

在我的composer.json文件中,我有:

"require": {
   ....................,
   ...................,
  "vendorName/moduleName":"*"
},
"repositories": [
  ......................,
  ....................,
  {
    "type": "composer",
    "url": "https://packages.firegento.com"
  }
],
Run Code Online (Sandbox Code Playgroud)

由于Composer已下载为预先配置为使用packagist.org,因此vendorName/moduleName将从中加载packagist

我想强制vendorName/moduleName从加载 firegento

我试图添加:

"repositories": [
  {
    "packagist": false
  },
Run Code Online (Sandbox Code Playgroud)

但是,然后,作曲家将不再在packagist中进行搜索:这不是我想要的(因为packagist中也有有用的软件包...)

我想我可以用

composer config --global --unset repositories.packagist
Run Code Online (Sandbox Code Playgroud)

然后

composer config --global repositories.firegento composer https://packages.firegento.com
composer config --global repositories.packagist composer https://packagist.org
Run Code Online (Sandbox Code Playgroud)

以我喜欢的顺序添加存储库(我不确定它是否起作用...)。

有没有更好/更简单的方法可以实现我的目的?composer.json与运行全局配置命令相比,我更愿意进行编辑,但这可能是不可能的。

Jul*_*let 5

好,

我想我在这里找到了答案:

最后,仅根据存储库定义的顺序对其进行评估。Packagist在内部被定义为最后一个(虽然您可以将其禁用),以确保在解析器设置允许的情况下始终首选本地副本。

这意味着,如果我firegento在自己的仓库中定义了仓库composer.json,那么作曲家将vendorName/moduleNamefiregento之前加载软件包packagist。我认为这是相反的行为。我错了。

另一个有用的评论在这里

存储库定义的顺序很重要。但是无论如何,composer仍然会搜索所有存储库,因为稍后定义的存储库可能具有您需要的软件包的较新版本。