2013-05-06 88 views
8

我设置了两个项目,一个'init'和一个库,这是init所需要的。它们都设置了PSR-0自动加载,但库中的自动加载值不会添加到init项目中的vendor/composer/autoload_namespaces.php。从图书馆作曲家不生成自动加载库

样品composer.json:从项目

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

样品composer.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" 
    } 
} 

库中包含的类LXP \图书馆\东西文件src/LXP/Library/Something.php。

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

在'init'项目中运行composer install时,它会下载库项目并将其正确放入供应商,但vendor/composer/autoload_namespaces.php不包含库的自动载入信息,仅包含当前项目的信息。

我在做什么错?如果我在库项目中运行dump-autoload,那么autoload_namespaces.php文件是正确的,并且一个快速启动脚本确认它确实拿起了类。

编辑 - 这是令人满意的packages.json的问题。为了解决这个问题,我必须将库的composer.json中的自动加载信息添加到我提供的json文件中,这似乎是不必要的重复,所以我可能做错了。是否有一个地方可以存储自动加载信息以满足库?例如,可以满足读取它扫描库中存在的composer.json文件吗?

编辑#2 - Satis不读取指定为'package'类型的存储库中的composer.jsons。事后看来,这是显而易见的,因为'package'用于没有composer.json的库,并且是一种包装类似composer的依赖关系管理的方法。

将satis.json的存储库更改为'vcs'类型意味着读取了composer.json,并且信息(包括自动载入规范)被解析并存储在packages.json中。

@谢尔达克 - 谢谢你提出我的满意配置是问题,我希望这能够澄清我/我所处位置的任何其他人的满意/作曲家行为。

回答

5

我看到了两个可能的错误,你可以这样做,将导致此:

  • 你忘了更新您的SATIS回购​​所以LXP /初始化自动加载的配置是不是最新的在那里
  • 你正在从锁定文件运行作曲家安装,这意味着作曲家只是从composer.lock文件读取信息,并且不会将套件元数据更新为可用的最新版本。为了解决这个问题,你应该运行作曲家更新
+0

@Seladek - 我SATIS产生packages.json不包含任何自动加载信息,是否应该?自从图书馆的自动加载信息被添加以来,它已经被重新生成。由于这是一个测试平台项目,我在运行之间完全拆除作曲家,删除composer.lock和供应商目录并重新运行作曲家安装。 – bmcgavin 2013-05-07 08:12:26

+0

@Seladek - 但是,我可以确认将自动载入信息直接添加到packages.json中是否具有预期的效果。现在编辑原始问题。 – bmcgavin 2013-05-07 08:41:01

+1

我认为现在的答案取决于你如何配置满意。如果你使用“type”:“package”,那么你可能不应该这样做,因为它只能用于没有composer.json的代码。如果是这样,你应该使用类型“vcs”,然后它会扫描git仓库的composer.json,并在生成的packages中正确包含autoload信息。 – Seldaek 2013-05-07 13:21:45

2

尝试composer dump-autoload命令。

0

这取决于你如何通过作曲家安装你的图书馆。例如,如果您将其下载为package类型(与我相信composer类型相同),因为作曲者从不读取composer.json,您需要使用vcs类型。请参阅:GH-6846

这里是composer.json这应该工作:

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

然后运行:composer install

为了排除故障,尝试运行:

  • composer dump-autoload -o -vvv
  • composer diagnose -vvv