当前位置: 首页 > 知识库问答 >
问题:

编写器未为库生成自动加载

颜志学
2023-03-14

我已经设置了两个项目,一个“init”和一个库,这是init所需要的。它们都设置了PSR-0自动加载,但是库中的自动加载值不会添加到初始化项目中的供应商/作曲家/autoload_namespaces.php中。

示例作曲家。来自库的json:

{
    "name": "lxp/library",
    "description": "A test library",
    "autoload": {
        "psr-0": {
            "LXP\\Library": "src/"
        }
    }        
}

示例作曲家。来自需要该库的项目的json:

{
    "name": "lxp/init",
    "name": "A test init",
    "autoload": {
        "psr-0": {
            "LXP\\Init": "src/"
        }
    },
    "repositories": [
        {
            "type": "composer",
            "url": "http://satis.repo.redacted/"
        }
    ],
    "require": {
        "lxp/library": "dev-master"
    }
}

该库包含文件src/LXP/library/Something中的类LXP\library\Something。php。

需要库的项目在src/LXP/Init/Now文件中包含类LXP\Init\Now。php。

在“init”项目中运行composer install时,它会下载库项目并将其正确地放入vendor中,但不包括vendor/composer/autoload_名称空间。php不包含库的自动加载信息,只包含当前项目的信息。

我做错了什么?如果在库项目中运行dump autoload,则自动加载的名称空间。php文件是正确的,并且一个快速引导脚本确认它确实拾取了类。

编辑-这是satis生成的包的问题。json。为了修复它,我必须添加来自库的composer的自动加载信息。将json转换为我提供给satis的json文件,这似乎是不必要的重复,因此我可能做得不对。有没有一个地方可以为satis库存储自动加载的信息?例如,萨提斯能读懂作曲家的作品吗。它扫描的库中存在的json文件?

编辑#2-萨蒂斯不读作曲家的作品。来自指定为“包”类型的存储库的JSON。事后看来,这是显而易见的,因为“包”用于没有编写器的库。json,并且是一种围绕它们包装类似于composer的依赖关系管理的方法。

换衣服。json的存储库改为“vcs”类型意味着编写器。读取json,解析信息(包括自动加载规范)并将其存储在包中。json。

@seldaek-谢谢你暗示我的satis配置是问题所在,我希望这能澄清我这个位置上的任何人的satis/作曲家行为。

共有3个答案

金昌胤
2023-03-14

这取决于您如何通过Composer安装库。例如,当作为packagetype下载时(我相信与composertype相同),composer从不读取composer。json文件,因此您应该使用vcsgit类型。见:GH-6846。

这里是作曲家。json哪种应该有效:

{
  "require": {
    "lxp/library": "dev-master"
  },
  "repositories": [
    {
      "type": "vcs",
      "url": "http://satis.repo.redacted/"
    }
  ]
}

然后运行:composer安装

要进行故障排除,请尝试运行:

  • 作曲家转储自动加载-o-vvv.
  • 作曲家诊断-vvv
龙永思
2023-03-14

尝试composer dump autoload命令。

公孙宏畅
2023-03-14

我认为你可能犯了两个可能的错误,会导致这种情况:

  • 您忘记更新您的satis repo,因此lxp/init的自动加载配置不是最新的
  • 您正在从锁定文件运行composer安装,这意味着composer只从composer读取信息。锁定文件,不将包元数据更新为satis中提供的最新版本。要解决此问题,应改为运行composer update
 类似资料:
  • 我刚刚开始使用composer进行依赖关系管理,我很难弄清楚我是如何不遵守psr-4进行自动加载的,所以我来这里寻求建议。我有一个生成随机值的类,它已经在packagist上了。项目结构如下(我已将composer.json文件标记为A和B): 项目总监 composer.jsonA composer.jsonB 最后是RlandValue.php文件,它声明了ejFrancis命名空间 当我运行

  • 我不熟悉使用composer和psr-0。我尝试了一个使用composer和psr-0的小应用程序。我已经使用名称空间加载了一个特定的类。当我使用composer vendor/autoload调用一个类时,我得到了“未找到类”错误。 我的composer.json文件:/var/www/html/silexapp/composer.json 我的作曲家供应商自动加载文件:/var/www/htm

  • 我试图使用高斯,但我得到以下致命错误: 致命错误:类GuzzleHttp\ClientInterface在第13行的 /var/www/myapp/vendor/guzzlehttp/guzzle/src/functions.php中找不到 我正在使用composer autoloader自动加载: 发生了什么事? 编辑 我的composer.json: 编辑2 我的作曲家。锁 编辑3 编写器配置

  • 我遇到了使用作曲家psr-4自动加载功能和PHPUnit的问题。问题发生在我的本地机器以及TravisCI版本上。单元测试无法找到我的类,而普通脚本可以找到。 当然,任何配置都有问题,但我无法找出我做错了什么。提前感谢你的帮助。 这是我的项目文件结构: 公共/ src/ http/ urlhelper。php 小黑 超文本传输协议/ urlhelper.test.php 这是我的作曲家的作品。js

  • 问题内容: 当Java编译器将原语自动包装到包装类时,它在幕后生成什么代码?我想象它调用: 包装器上的valueOf()方法 包装器的构造函数 还有其他魔术吗? 问题答案: 您可以使用该工具亲自查看。编译以下代码: 编译和反汇编: 输出为: 因此,如您所见,自动装箱将调用static方法,而自动拆箱将在给定对象上调用。没什么,真的- 只是语法糖。

  • 我正在开发一个使用Monolog的项目,需要Psr/log。当我通过自动加载使用Monolog时,它会抱怨缺少Psr\Log\LoggerInterface。所以我查看作曲家生成的autoload_namespaces.php,我找不到注册的Psr。 这是我的供应商/autoload_namespaces.php的内容 作曲家是否应该为composer.json文件中定义了{autoload}的所