在重构遗留代码时,我尝试使用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存储库满足无开发要求。答案 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
。最后一条命令还将安装所有缺少的软件包。
我希望它有用!