Composer不生成自动加载程序信息(autoload_namespace.php)
我无法通过composer正确安装项目。我有一个自己的定制包(库),托管在一个非公共的git repo(但是是集中式的)中,它由composer获取(虚拟项目包含一个composer.json,仅用于测试我的包) 所以结构是这样的:Composer不生成自动加载程序信息(autoload_namespace.php),php,json,composer-php,autoload,psr-0,Php,Json,Composer Php,Autoload,Psr 0,我无法通过composer正确安装项目。我有一个自己的定制包(库),托管在一个非公共的git repo(但是是集中式的)中,它由composer获取(虚拟项目包含一个composer.json,仅用于测试我的包) 所以结构是这样的: composer.json的内容: { "name": "vendor/test", "description": "Test-description", "authors": [{ "name": "Benjamin C
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”时,一切似乎都很好,但是自动加载程序信息丢失,“autoload_namespace.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”文件
感谢您的帮助:)您的包
foo/bar
已声明了包含路径。根据文档(请参阅),此功能已被弃用,只应用于支持无法自动加载的旧代码
我认为这是您的软件包没有被添加到自动加载的原因,因为它也可以通过include path加载(这是一件坏事,因为它对性能的影响太大了-不惜一切代价避免它)。如果您试图通过“存储库”安装私有库/软件包composer.json的节点也必须重新指定“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/"
}
}
}]
}
我只是花了几个小时才弄明白。干得好,作曲家 Zacharydanger解决方案适用于需要软件包而不更改默认安装路径(即供应商
文件夹)的情况
如果使用composer/installer path
并在供应商文件夹外安装软件包,则需要相应地设置自动加载路径
{
"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"
},
"extra": {
"installer-paths": {
"core/{$name}": [
"type:git-package"
]
}
},
"autoload": {
"psr-0": {
"Foo": "core/Framework/"
}
}
}]
}
您能否显示库的完整目录结构,包括源代码所在的位置?(或其模糊版本)。我用当前的acvtive版本试用了一下,效果很好!非常感谢您分享您的知识:)非常烦人的问题。我最终在packagist.org上启动了我的包,并运行了composer require[package name]
。这也将解决这个问题。
{
"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"
},
"extra": {
"installer-paths": {
"core/{$name}": [
"type:git-package"
]
}
},
"autoload": {
"psr-0": {
"Foo": "core/Framework/"
}
}
}]
}