我想在我的 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 变量。有没有可能实现这一目标?
composer.lock我认为这不是一个好主意,因为您有可能从错误的环境提交文件并部署它的风险。但希望您有更严格的部署检查!
我没有确切的解决方案,但有一些选择:
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.jsoncomposer.lock文件这意味着维护两个单独的文件,例如composer.local.json和composer.json. 这可能很乏味,但至少清楚发生了什么。根据您的COMPOSER环境变量,您可以更改它使用的文件名
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |