这应该很简单。我开发了一个名为MyVendor \ MyPackage的包调用
MyVendor\MyPackage
内的是:
MyVendor\MyPackage\composer.json
文件包含:
{
"name":"MyVendor/MyPackage",
"description":"MyClass!!!",
"keywords": ["MyKeyword"],
"homepage": "http://MyPackage.com",
"type":"library",
"license": "MIT",
"authors": [
{
"name": "ME",
"email": "ME@ME.com",
"homepage":"http://ME.com"
}
],
"require": {
},
"autoload":{
"psr-4" : {
"MyVendor\\MyPackage\\":""
}
}
}
现在我有另一个名为MyOtherPackage
的项目,其composer.json
文件如下:
{
"require": {
"monolog/monolog": "1.2.*",
"MyVendor/MyPackage": "1.0.0"
},
"autoload": {
"psr-4": {
"MyVendor\\MyOtherPackage\\": "MyOtherPackage/",
"MyVendor\\": "/"
}
},
"repositories": [
{
"type": "package",
"package": {
"name": "MyVendor/MyPackage",
"version": "1.0.0",
"source": {
"url": "https://ME.com/svn/MyVendor/MyPackage/",
"type": "svn",
"reference": "trunk"
}
}
}
]
}
所以MyOtherPackage依赖于MyPackage。一切都下载得很好,但如果我打开autload_namespaces.php它只包括monolog。它看起来像这样:
return array(
'Monolog' => array($vendorDir . '/monolog/monolog/src'),
);
为什么MyVendor/MyPackage
或namespaces.php
文件中没有显示autoload_psr4.php
? composer.json
文件错了吗?
编辑我已添加到MyPackage composer.json文件中。
答案 0 :(得分:1)
我已经弄清楚了。似乎将存储库定义为一个包,我告诉作曲家它不是一个与作曲家兼容的类,这意味着作曲家不会寻找一个composer.json文件。
为了解决这个问题,我删除了包定义并使依赖类的composer.json文件看起来像:
{
"require": {
"monolog/monolog": "1.2.*",
"MyVendor/MyPackage": "1.0.0"
},
"autoload": {
"psr-4": {
"MyVendor\\MyOtherPackage\\": "MyOtherPackage/",
"MyVendor\\": "/"
}
},
"repositories": [
{
"type": "svn",
"url": "https://ME.com/svn/MyVendor/MyPackage/",
"reference": "tags"
}
]
}
这告诉作曲家从这个存储库下载包并查找composer.json文件。
答案 1 :(得分:0)
您没有在第一个包中定义任何自动加载机制。如果不这样做,Composer就无法知道如何自动加载类,并且什么都不做(如果你的软件包根本不包含任何PHP,那么这是一个有效的选项,但仅限于图像和javascript)。
添加如下内容:
"autoload": {
"psr-0": {
"MyVendor\\Namespace":"src/path"
}
}