为了使用composer的provide功能,我在我的实现库ffa php mock中添加了一个provide
部分,我说它提供了shadiakiki1986/ffa php实现。在使用此实现的存储库ffa-php-cli中,我用需要ffa-php-implementation
的条目替换了需要ffa-php-mock
的composer-require条目。如果我尝试运行composer update
,我会得到以下
> composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- The requested package shadiakiki1986/ffa-php-implementation could not be found in any version, there may be a typo in the package name.
Potential causes:
- A typo in the package name
- The package is not available in a stable-enough version according to your minimum-stability setting
see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.
Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.
你能给我一些关于如何调试问题所在的提示吗?
编辑:简化示例
我在一个已经存在的虚拟项目中尝试了provide
功能。jackalope/jackalope提供phpcr/phpcr-implementation
,这反过来又是DoctrineHPCRBundle所需要的。
如果我用composer init
启动一个新的空项目,并指定我的项目依赖于phpcr/phpcr-implementation
,我会得到与上面相同的错误。我还尝试将phpcr/phpcr-implementation
直接放在composer.json文件中并运行composer update
,但没有成功。
> cat composer.json
{
"require": {
"phpcr/phpcr-implementation": "2.1.0"
}
}
我认为这可能是composer中的一个bug,但从这个问题来看,它似乎已经在使用了。
> composer --version
Composer version 1.3.0 2016-12-24 00:47:03
我能找到的最接近composer github的问题是#2811,但它说报告不清楚,而不是provide
不起的作用
因此,我最终了解到带有实现的特定包仍应包含在composer.json文件中。对于使用库的包,这是可以的,因为它们被添加到require
部分。对于直接需要实现的库,应该在require-dev
中完成,这样单元测试就可以工作,并且使用该库的其他项目不需要使用相同的实现