新创建的PHP Composer包,一旦安装到另一个应用程序中,将不会下载Composer包的依赖项



我已经有6年没有编码了。

我目前是为了自己的理解,提醒自己创建Composer包的过程。

我创建了一个简单的包,它有一个依赖项。它可以独立工作。拉入并运行测试

我创建了一个新的应用程序进行测试。我把新包的位置作为依赖项给了应用。

它工作了——它把它拉进去,然后半运行。

我说半,因为它不拉入包1的依赖。

我确定这是一个丢脸的场合,但我不记得我做错了什么。

如果你能指出正确的方向我会很感激的。

这是包的composer.json文件:

{
"name": "sidekick/config",

"minimum-stability": "stable",
"require": {
"vlucas/phpdotenv" : ">=5.4"
},

"autoload": {
"psr-4": {
"SideKick\Config\": "src"
}
}
}

这是MyApp的composer.json文件

{
"name": "myapp/package-tester",
"autoload": {
"psr-4": {
"MyApp\PackageTester\": "src/"
}
},

"require": {
"sidekick/config": "dev-master"
},
"minimum-stability": "stable",
"repositories": [
{
"type":"package",
"package": {
"name": "sidekick/config",
"version":"dev-master",
"source": {
"url": "prob-best-to-keep-private-for-now",
"type": "git",
"reference":"master"
},
"autoload": {
"classmap": ["/"]
}
}
}
]
}

最后,这是由编写器生成的类映射和供应商目录的抓取:

return array(
'Composer\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'SideKick\Config\Config' => $vendorDir . '/sidekick/config/src/Config.php',
);

获取供应商目录

Composer有几个通常用于故障排除的命令,不需要从class-map/autoloader1中推断。

composer show(只是)。我喜欢它的一点是,如果你从自己的存储库中拉入,它会显示git提交哈希。有了git,你就可以显示编译器了。

git show也就是git -C <repo-path> show <rev>:composer.jsonjq(1)。本地git库中的项目链接示例:

$ composer show                                                
hakre/json-pointer        dev-wip/bin e476125 JSON Text and JSON Pointer PHP library (data driven).
hakre/tunesmith           1.0.0               Tunesmith - noun; informal - A composer of popular musi...
roave/security-advisories dev-latest 9edb62e  Prevents installation of composer packages with known s...
$ git -C ../JsonPointer show e476125:composer.json | jq '.require'
{
"php": "^5.3.3 || ^7.0 || ^8.0",
"ext-json": "*"
}

这里的依赖项目是从一个较旧的版本安装的,除了平台包之外没有任何其他需求。

大多数情况下,它会很快找到你所描述的问题。

composer whyandwhy-not也可以在处理需求解决时提供帮助,尽管在这种情况下请求Why not?,但没有看到任何需求,这是没有多大意义的。我只是在接下来可能出现的问题中提到它们,比如版本冲突,或者你只是想知道。


  1. 关于作曲家自动加载器的故障排除:是的,我知道它是有效的,我有时也这样做,但我发现只有当我需要解决实际自动加载问题时才最好,而不是"要求";如前所述。读取vendor/composer目录是困难的,因为它有许多文件,特别是从自动加载器。

相关内容

最新更新