Php 编写器存储库类型取决于环境
我想在composer.json中添加存储库,其中源代码取决于应用程序环境。例如,如果我在本地环境中,我希望包含来自本地文件路径的存储库,如果它在生产环境中,那么我希望包含来自GIT的存储库 在本地:Php 编写器存储库类型取决于环境,php,composer-php,Php,Composer Php,我想在composer.json中添加存储库,其中源代码取决于应用程序环境。例如,如果我在本地环境中,我希望包含来自本地文件路径的存储库,如果它在生产环境中,那么我希望包含来自GIT的存储库 在本地: "repositories": [ { "type": "path", "url": "../local-path" }, ] 生产中: "repositories": [ { "type": "vcs",
"repositories": [
{
"type": "path",
"url": "../local-path"
},
]
生产中:
"repositories": [
{
"type": "vcs",
"url": "https://github.com/...."
},
]
在my.env文件中有一个APP_env变量。有没有可能实现这一点?我认为这不是一个好主意,因为您有可能从错误的环境提交
composer.lock
文件并进行部署。不过,希望您有更严格的部署检查
我没有确切的解决方案,但有一些选择:
在本地使用Composer配置文件
- 不需要单独的编写器文件
- 可能会对版本很挑剔(我以前在让composer访问symlink时遇到过麻烦)
- 应该只允许您维护一个
,并且在添加新的本地repo时只触摸配置文件composer.json
composer.json
创建了一个项目
{
"name": "mickadoo/test",
"type": "project",
"require": {
"mickadoo/basedata": "dev-master"
}
}
我添加了一个单独的需求,这是我几年前自己放在PackageGist上的一个包
然后我创建了一个虚拟库,用相同的名称在本地测试它。它位于一个库
目录中,其中只包含一个composer.json
文件。目标是检查composer是否将安装此空库(无要求)而不是联机库
{
"name": "mickadoo/basedata",
"type": "library",
"require": {}
}
然后,我向项目根目录添加了一个config.json
文件,配置告诉composer向上添加一个本地repo one目录:
{
"repositories": [
{
"type": "path",
"url": "../library"
}
]
}
在所有这些之后,我首先尝试运行composer update
并将composer\u HOME
env变量设置到我的当前目录。这确保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
然后,我删除了我所做的一切,因为我以前在composer中弄乱了本地路径,并且知道开始工作可能会令人沮丧:
$ rm -rf vendor/ && rm composer.lock
最后,我试着正常运行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
的确如此
使用单独的composer.json
- 保持事物清晰可见
- 分离
文件composer.lock
这意味着要维护两个单独的文件,如
composer.local.json
和composer.json
。这可能很乏味,但至少清楚发生了什么。根据您的COMPOSER
env变量,您可以更改它使用的文件名我在这里看到了几个选项
--首选dist
,dev上的--首选source
)composer.json
文件用于生产,将composer-dev.json
用于开发,并首先设置系统环境变量来运行第二个:
COMPOSER=COMPOSER-dev.json php COMPOSER安装
但这可能会产生一些不兼容问题(当您忘记将包从composer-dev.json
移动到生产composer.json
时){
"name": "mickadoo/test",
"type": "project",
"require": {
"mickadoo/basedata": "dev-master"
}
}
你到底为什么要这样做?听起来你会遇到很多麻烦。一旦git上的存储库从本地版本转移,你的开发环境和产品就会运行不同的代码库,这可能会导致本地环境在生产中断时工作。我的建议是不是解决这个问题,而是找到一条通往真正目标的更好的道路。真正的目标是什么?反对在任何地方使用github版本的理由是什么?