Composer包未显示在autoload_namespaces中

时间:2014-02-12 00:36:24

标签: namespaces composer-php

这应该很简单。我开发了一个名为MyVendor \ MyPackage的包调用

MyVendor\MyPackage内的

是:

  • 的Myvendor \ MyPackage的\ composer.json
  • 的Myvendor \ MyPackage的\ MyClass.php

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/MyPackagenamespaces.php文件中没有显示autoload_psr4.phpcomposer.json文件错了吗?

编辑我已添加到MyPackage composer.json文件中。

2 个答案:

答案 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"
    }
}