我的问题是私有制造的repo的composer.json在尝试将其用作其他地方的包时似乎被打破了。
我有一个私人仓库,其中包含其他项目所需的代码。 repo的composer.json看起来像这样:
{
"name": "somevendor/global",
"require": {
"nesbot/carbon": "^1.21"
},
"autoload": {
"psr-4": {
"" : "src/"
},
"files": [
"somedir/somefile.php"
]
}
}
src
位于repo的基目录中,包含PSR-4命名空间类。我在其中有名称空间文件夹,例如一个Foo
目录,其中包含Foo
命名空间中的类:
-- src
-- Foo
// some Foo\... classes
// some global namespace classes
-- somedir
somefile.php // A file with helper functions
在项目文件夹中,我通过composer.json文件访问somevendor/global
repo:
{
"require": {
"somevendor/global-folder": "dev-master"
},
"repositories": [
{
"type": "package",
"package": {
"name": "somevendor/global",
"version": "dev-master",
"type": "package",
"source": {
"url": "git@bitbucket.org/somevendor/global.git",
"type": "git",
"reference": "master"
}
}
}
]
}
项目文件夹中运行composer install
似乎最初有效。我已正确安装SSH密钥,因此它可以访问Bitbucket上的私人仓库并获取文件:
$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing somevendor/global (dev-master master)
Cloning master
Writing lock file
Generating autoload files
然后在项目的PHP代码I require vendor/autoload.php
中,但没有一个类被自动加载,包括在第一个repo的composer.json文件中指定的Carbon
包:
Fatal error: Uncaught Error: Class 'Foo\Foo' not found in...
我在这里犯了一个错误,我是否错误地构建了第一个回购?
答案 0 :(得分:1)
我通过从远程repo的composer.json
文件中取出所有“require”条目并将它们移动到本地网站的composer.json
文件来“解决”这个问题。
这就是文件的样子:
远程私人仓库composer.json
:
{
"name": "somevendor/global",
"license": "proprietary",
"autoload": {
"psr-4": {
"" : "src/"
},
"files": [
"functions/functions.php"
]
}
}
本地网站的composer.json
:
{
"require": {
"nesbot/carbon": "^1.21",
"somevendor/global": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "git@bitbucket.org:somevendor/global.git"
}
]
}
它不断抛出Composer\Repository\InvalidRepositoryException
,因为我忘了将name
放入远程仓库的composer.json
文件中,所以不要忘记这一点!
还要记得设置你的git ssh键,如果你已经设置好了。我用this Bitbucket tutorial来做这件事。