【问题标题】:Is there a way to optionally require a local composer package?有没有办法选择需要本地作曲家包?
【发布时间】:2020-01-08 10:16:28
【问题描述】:

我有多个开发环境,其中一个本地包含我的包的源代码,另一个没有。我想单独配置我的环境,但我也想让 composer 知道它应该使用我的本地包(如果存在),并使用 packagist 版本作为后备。

我尝试在网上寻找这种东西,但我找不到直接的答案。我已经知道如何要求本地包,但我不知道如何可选地要求本地包。

重申一下,我想像这样要求我的包:

"require": {
    "php": "^7.1.3",
    /* ... */
    "my-namespace/my-package": "dev-master",
},

并且能够以某种方式列出这个包,因为有时在本地可用。如果我这样做:

"repositories": [
    {
        "type": "path",
        "url": "./path/to/my/package"
    },
]

我可以在本地要求它,但这意味着在我的其他开发环境中(本地不存在该包,我也不希望它存在),composer 将无法要求我的包。

一旦说完,我希望我的本地环境(我的包在本地托管的那个)需要包的本地版本,我希望我的其他环境(本地没有我的包的那个)托管) 来要求包的 packagegist 版本。

有什么想法吗?

【问题讨论】:

  • @EternalHour 此问题与您引用的问题不重复。您引用的问题涉及仅在某些环境中安装某些软件包的“--dev”和“--no-dev”标志。对于这个问题,我希望将包安装在两个环境中,但我希望包的来源不同,具体取决于包的本地副本是否存在。

标签: php composer-php


【解决方案1】:

我认为您不想“可选地要求”,因为包是必不可少的。您希望始终包含它,但只有在本地不可用时才下载它。

有这篇文章描述了这个过程:https://johannespichler.com/developing-composer-packages-locally/

简而言之:您在应用程序中添加一个指向本地库存储库的“存储库”条目:

"repositories": {
  "dev-package": {
    "type": "path",
    "url": "relative/or/absolute/path/to/my/dev-package",
    "options": {
      "symlink": true
    }
  }
}

“url”指向您本地库存储库的路径。 options.symlink 很重要,否则 Composer 将复制 repo 而不是对其进行符号链接(迫使您不断更新副本而不是自动获取所有更改)。

在其他机器上,路径不指向任何地方,Composer 不会检测到那里的 lib,并搜索其他来源,可能是从 repo 服务器下载的。

【讨论】:

  • 我明白这一点,但从技术上讲,我必须列出我的包两次,因为“生产”版本是使用特定的 VCS 托管的。当我列出 VCS 和路径版本时,composer 总是从首先列出的存储库中获取一个,并记住它用于安装的内容(在没有本地 repo 的环境中失败)。
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 2020-03-23
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2021-03-03
相关资源
最近更新 更多