我有一个库foo/foo-lib
,requires
来自GitHub的特定提交:
{
"name": "foo/foo-lib",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/KnpLabs/Gaufrette.git"
}
],
"require": {
"knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
}
}
它工作正常:
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Updating knplabs/gaufrette dev-master (2633721 => 2633721)
Checking out 2633721877cae79ad461f3ca06f3f77fb4fce02e
Generating autoload files
但是当我在其他项目中需要该库时:
{
"name": "bar/bar-app",
"repositories": [
{
"type": "vcs",
"url": "ssh://git.example.com/foo-lib"
}
],
"require-dev": {
"foo/foo-lib": "dev-master"
}
}
它产生依赖性错误:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for foo/foo-lib dev-master -> satisfiable by foo/foo-lib[dev-master].
- foo/foo-lib dev-master requires knplabs/gaufrette dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e -> no matching package found.
所以我的问题是:如何正确require
我的库中GitHub的具体提交,以便它可以在依赖包中使用?
你必须在你的库和你的应用程序中明确要求使用带有dev
标志的那个散列的Gaufrette库。像这样的东西应该在应用程序composer.json
中工作:
{
"name": "bar/bar-app",
"repositories": [
{
"type": "vcs",
"url": "ssh://git.example.com/foo-lib"
}
],
"require-dev": {
"foo/foo-lib": "dev-master",
"knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
}
}
如果您的某个依赖项依赖于不稳定的包,则还需要明确要求它,以及其足够的稳定性标志。
该文档还建议您需要在bar/bar-app
Composer文件中包含Gaufrette的存储库,尽管在这种情况下听起来不是必需的。我不知道为什么。
以下是在命令行中执行此操作的方法:
composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies
您不必使用整个哈希值,哈希七个字符似乎很长。如上所述,您的项目需要支持dev - 如果尚未设置,它将会抱怨。此外,使用--with-dependencies
获取您正在更新的依赖项。