我无法通过 Composer 正确安装项目。我有一个自己的自定义包(库)托管在一个非公共(public)的 git repo(但集中)中,它由 composer 获取(包含 composer.json 的虚拟项目只是为了测试我的包)。
所以结构是这样的:
/test/project/composer.json
index.php
composer.json 的内容:
{
"name": "vendor/test",
"description": "Test-description",
"authors": [{
"name": "Benjamin Carl",
"email": "email@testdomain.com",
"homepage": "http://www.testdomain.com",
"role": "Developer"
}],
"keywords": [
"foo",
"bar"
],
"homepage" : "http://www.testdomain.com/",
"license" : [
"The BSD License"
],
"repositories": [{
"type": "package",
"package": {
"name": "foo/bar",
"version": "0.0.1",
"source": {
"url": "git@git.testdomain.local:benjamin.carl/bar.git",
"type": "git",
"reference": "master"
}
}
}],
"require": {
"foo/bar": "0.0.1"
}
}
因此,当我在包含测试项目和上面看到的 composer.json 的文件夹中运行 composer install "php composer.phar install"- 一切似乎都很好 - 但是 - 自动加载器信息丢失了 - map “autoload_namespaces.php”(生成的文件)中的(数组)保持为空。
我假设当我用 composer 安装一个包时,这个包(在我的例子中是 foo/bar 包)包含一个 composer.json 文件——这个文件也在安装过程中执行/处理,自动加载的信息取自这个(包)composer.json 文件。我对吗?还是我做错了什么?
这是包 foo/bar 中的“composer.json”文件的内容:
{
"name": "foo/bar",
"description": "foo - the project for all bars out there.",
"authors": [{
"name": "Benjamin Carl",
"email": "email@testdomain.com",
"homepage": "http://www.testdomain.com",
"role": "Developer"
}],
"keywords": [
"php",
"foo",
"bar",
"baz"
],
"homepage": "http://testdomain.com/",
"license": [
"The BSD License"
],
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-0": {
"Foo": "Framework/"
}
},
"include-path": ["Framework/"],
"support": {
"email": "email@testdomain.com",
"issues": "https://testdomain.com/issues",
"wiki": "https://testdomain.com/wiki"
},
"repositories": [{
"type": "vcs",
"url": "https://git.testdomain.local/test/bar.git"
}]
}
作为上面配置的结果,我想要这样的自动加载信息:
$data = array(
'Foo' => $vendorDir . '/foo/bar/Framework'
);
如果我手动插入这一行“'Foo'=> ...”一切正常。但我不明白为什么 Composer 没有将此信息写入“autoload_namespaces.php”文件。
感谢您的帮助:)
最佳答案
如果您尝试通过 composer.json
的“repositories”节点安装私有(private)库/包,显然您还必须重新指定“autoload”节点。
{
"repositories": [{
"type": "package",
"package": {
"name": "foo/bar",
"version": "0.0.1",
"source": {
"url": "git@git.testdomain.local:benjamin.carl/bar.git",
"type": "git",
"reference": "master"
},
"autoload": {
"psr-0": {
"Foo": "Framework/"
}
}
}]
}
我刚刚花了几个小时弄明白了这一点。干得好, Composer !
关于php - Composer 不生成自动加载器信息 (autoload_namespaces.php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18106599/