Composer 存储库类型取决于环境

Joc*_*ter 5 php composer-php

我想在我的 composer.json 中添加存储库,其中源取决于应用程序环境。例如,如果我在本地环境中,我想从本地文件路径中包含存储库,如果它在生产中,那么我想从 GIT 中包含。

在本地:

"repositories": [
     {
         "type": "path",
         "url": "../local-path"
     },
 ]
Run Code Online (Sandbox Code Playgroud)

生产中:

"repositories": [
     {
         "type": "vcs",
         "url": "https://github.com/...."
     },
 ]
Run Code Online (Sandbox Code Playgroud)

在我的 .env 文件中是一个 APP_ENV 变量。有没有可能实现这一目标?

mic*_*doo 5

composer.lock我认为这不是一个好主意,因为您有可能从错误的环境提交文件并部署它的风险。但希望您有更严格的部署检查!

我没有确切的解决方案,但有一些选择:

在本地使用 Composer 配置文件

  • 不需要单独的作曲家文件
  • 可能对版本很挑剔(我之前在让作曲家进行符号链接时遇到了麻烦)
  • 应该允许您仅维护一个composer.json并且仅在添加新的本地存储库时触摸配置文件

文档

在此示例中,我创建了一个带有简单composer.json.

{
    "name": "mickadoo/test",
    "type": "project",
    "require": {
        "mickadoo/basedata": "dev-master"
    }
}
Run Code Online (Sandbox Code Playgroud)

我添加了一个需求,这是我几年前自己放在 packagist 上的一个包。

然后,我创建了一个虚拟库,以使用相同的名称在本地测试它。它位于一个library仅包含一个composer.json文件的目录中。目标是检查 Composer 是否会安装这个空库(无要求)而不是在线库。

{
    "name": "mickadoo/basedata",
    "type": "library",
    "require": {}
}
Run Code Online (Sandbox Code Playgroud)

然后,我config.json向项目根目录添加了一个文件,其中的配置告诉 Composer 在上一级目录中添加本地存储库:

{
  "repositories": [
    {
      "type": "path",
      "url": "../library"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

毕竟,我首先尝试运行composer update并将COMPOSER_HOME环境变量设置为当前目录。这确保了 Composer 将拾取config.json并将其合并到它正在使用的配置中。

$ COMPOSER_HOME=$PWD composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing mickadoo/basedata (dev-master): Symlinking from ../library
Writing lock file
Generating autoload files
Run Code Online (Sandbox Code Playgroud)

然后我删除了我所做的一切,因为我之前在作曲家中弄乱了本地路径,并且知道开始工作可能会令人沮丧:

$ rm -rf vendor/ && rm composer.lock 
Run Code Online (Sandbox Code Playgroud)

最后我尝试composer update正常运行,希望它能跳过config.json并从 Github 中提取包。

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 14 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-apcu (v1.13.1): Downloading (100%)         
  - Installing psr/log (1.1.2): Downloading (100%)         
... more package installs from Github here....
Writing lock file
Generating autoload files
Run Code Online (Sandbox Code Playgroud)

它做到了!

使用单独的composer.json

  • 保持事物清晰可见
  • 单独的composer.lock文件

文档

这意味着维护两个单独的文件,例如composer.local.jsoncomposer.json. 这可能很乏味,但至少清楚发生了什么。根据您的COMPOSER环境变量,您可以更改它使用的文件名