作曲家要求从包自动加载未添加到项目的自动加载中


Composer require-dev autoload from package not added to project's autoload

我在 composer.json 文件中制作了一个具有以下设置的作曲家包:

"autoload": {
    "psr-4": {
        "MyVendor''MyPackage''": "src/"
    }
},
"autoload-dev": {
    "psr-4": {
        "Test''Unit''MyProject''MyPackage''": "test/unit"
    }
},

如果我运行作曲家安装,强制执行开发参数,并且我得到以下"autoload_psr4.php"文件:

<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
    'Test''Unit''MyVendor''MyPackage''' => array($baseDir . '/test/unit'),
    'MyVendor''MyPackage''' => array($baseDir . '/src'),
);

所以基本上,这里一切正常。然后,我将包添加到 Satis 服务器。

在我的项目的 composer.json 文件中,我添加了以下行:

"require": {
    "myvendor/mypackage": "1.0.*@dev",
    "symfony/http-foundation": "2.5.*",
    "symfony/http-kernel": "2.5.*"
}

再一次,我在我的项目中运行作曲家安装,强制执行开发参数。该软件包安装在"供应商/我的供应商/mypackage 文件夹"中,我知道安装了 DEV 版本,因为"测试"文件夹在那里(稳定版本上排除了测试文件夹(存档除外)。

但是,"autoload_psr4.php"文件中缺少以下行

'Test''Unit''MyVendor''MyPackage''' => array($baseDir . '/test/unit'),

这是我使用的作曲家安装命令:

composer install --dev -d /var/www/myproject

基本上,我想知道为什么我的包的 dev 命名空间没有添加到自动加载器中。有人可以解释一下吗?

autoload-devrequire-dev都只适用于根(顺便说一句,dev是默认值)。开发版本仅在您想要开发包时才有用。一旦您在另一个项目中需要包,您就不再希望开发包,而是开发另一个项目。