如何使用符号链接的作曲家软件包进行开发,但如何从vcs存储库进行构建?

时间:2019-10-18 11:25:44

标签: php git composer-php

在重构遗留代码时,我尝试使用composer程序包,同时尝试使用该程序包的项目。

Composer允许我添加本地路径存储库以检索正在开发的程序包,并将symlinking this package添加到我的项目中。

CONVERT()

然后我做

<composer.json excerpt>
"repositories": [
    {
        "type": "path",
        "url": "../my-package/",
        "options": {
            "symlink": true
        }
    }
],

...
"require": {
    "my/package": "@dev"
}

哪个符号链接很好。但是,在CI服务器上构建项目时,我希望项目从远程git存储库中检索软件包,这就是为什么我将vcs部分添加到composer update my/package --prefer-source 的原因。

composer.json

但是,在通过 { "type": "vcs", "url": "git@bitbucket.org:my/package.git" } 进行构建的过程中,它仍然尝试在本地检索软件包,这当然在CI服务器上不可用。我猜是因为我的composer install明确表示该包是从路径中检索的。 如何使它在本地和CI服务器上都能顺利运行?我似乎缺少一个体面的工作流程。

到目前为止我尝试过的事情:

  • 再次将composer.lock作为开发包添加,但是如果从no-dev包中删除,则composer.json显然会自动删除。另外,我不知道如何告诉作曲家使用路径存储库满足开发要求,而将vcs存储库满足无开发要求。

1 个答案:

答案 0 :(得分:2)

我是同一案子。

经过数小时的寻找合适的工作流程后,我找到了一个。希望它能对您有所帮助。

由于repository-dev(例如repository-dev)不存在且不久将不存在(请参见this),因此我们需要制作两个composer.json文件。假设我们称第二个为composer-dev.json。我认为您应该同时提交并同时保持最新状态。要告诉作曲家使用composer-dev.json,您需要在每个作曲家命令之前放置COMPOSER=composer-dev.json。为了说明,请参见:

composer.json

{
    "repositories":[
        {
            "type": "vcs",
            "url": "{repo}"
        }
    ],
    "require": {
        "vendor/package": "{version}",
    }
}

composer-dev.json

{
    "repositories":[
        {
            "type": "path",
            "url": "path/to/your/package",
            "options": {
                "symlink": true
            }
        }
    ],
    "require": {
        "vendor/package" : "{version}",
    }
}

如您所见,composer.json包含'vcs'存储库,而composer-dev.json包含'path'存储库。

要初始化您的应用程序并开始开发:

COMPOSER=composer-dev.json composer update

Composer创建了供应商目录,并将您的软件包文件夹符号链接到vendor/package。它还创建了一个composer-dev.lock文件,您应提交该文件进行部署。

要安装新软件包:

COMPOSER=composer-dev.json composer require vendor/package

请记住,composer.json 必须是最新的,因此您必须在其中添加所有新行。

要构建您的应用程序:

COMPOSER=composer-dev.json composer install

应该扔给你什么:

[RuntimeException]
Source path "path/to/your/package" is not found for package vendor/package

现在您可以运行:

composer update --no-dev vendor/package

或者如果您需要特定版本:

composer update --no-dev vendor/package:{version}

请注意,由于我们使用COMPOSER=composer-dev.json是为了使用vcs存储库,因此在最后一个命令前没有 composer.json。最后一条命令还将安装所有缺少的软件包。

我希望它有用!