我有一个本地 PHP 项目(一个网站),我想使用我制作的另一个项目(一个小型 Web 框架)作为该网站项目的 Composer 包。我正在同时开发它们,但希望将它们保留为单独的项目;当我部署网站时,我想使用 Composer 将框架项目作为包安装,就像我使用 Guzzle 或任何其他常见 Composer 包一样。
网站项目有以下内容composer.json
:
{
"repositories": [
{
"type": "path",
"url": "/local/path/to/framework/package"
"options": {
"symlink": true
}
}
],
"require": {
"my/framework": "dev-master",
"guzzlehttp/guzzle": "6.3.3"
}
}
In /local/path/to/framework/package/composer.json
I have:
{
"name": "my/framework",
"description": "A tiny framework.",
"autoload": {
"psr-4": {
"MyFramework\\": "src"
}
}
}
I run php composer.phar update
它在我的网站项目中设置了一个指向框架包的符号链接。如果我更新框架中的代码,它会立即可供网站代码使用。这很棒。
但是,稍后我想将网站项目部署到我的网络服务器。对于干净的部署,我有一个部署脚本,它导出网站 git repo 的相应分支的存档副本,然后运行php composer.phar install
以确保安装了所有正确的软件包。通过上述配置,部署脚本创建了一个指向框架包的符号链接,当部署工件被压缩并 scp 到 Web 服务器时,这显然是不好的。
如果我删除symlink
上面的选项,然后我必须运行php composer.phar update
每次我对框架包进行任何更改时,这都很烦人,因为我正在串联开发这些包。但是在部署时,包被复制进来,而不是被符号链接进来;这对于部署很有好处,但它总是复制到master
分支(因为我指定dev-master
in composer.json
).
有没有一种方法可以设置Composer,以便我可以方便地使用本地符号链接包进行开发,但又可以让部署脚本获得框架包的干净副本,而无需进行更改composer.json
每次我想部署时?
我还尝试将存储库类型更改为vcs
代替path
,但是作曲家clones框架包存储库,我真的不需要在本地克隆该存储库vendor/
树,无论是在开发还是部署期间。我只是希望能够在开发过程中拥有一个符号链接树(它可以让我即时更新),并安装一个干净的包以进行部署。
我可能不得不“正确”地开发框架项目,即作为一个 Composer 包,用实际的发布版本号进行标记,然后更新我的网站项目以在部署时使用特定版本。不过,我仍然没有找到最简单的方法。