作曲家需要本地包

新手上路,请多包涵

我有几个库 [Foo 和 Bar] 我正在共同开发,但在技术上仍然是独立的东西。以前我刚刚将自动加载器重新定义为喜欢 "Foo\\": "../Foo/src" ,但现在我已经向 Foo 添加了 Guzzle 依赖项,Bar 翻转它的盖子,因为它不是它的依赖项之一。

目录结构:

 /home/user/src/
    Foo/
        src/
            FooClient.php
        composer.json
    Bar/
        src/
            BarClient.php
        composer.json

理论自动加载声明:[在 Bar/composer.json]

 "require": {
    "local": "../Foo/composer.json"
}

示例代码:

 require('vendor/autoload.php');

$f = new \Bar\BarClient(new \Foo\FooClient());

如何在不设置本地 Composer 存储库的情况下解决此问题?我想将这些作为单独的包进行维护,只是一个需要另一个,因此处理另一个的依赖项。

回答后编辑:

感谢infomaniac,我做了以下事情:

初始化 git repo:

 cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"

添加了作曲家配置:

 "require": {
    "sammitch/foo": "dev-master"
},
"repositories": [{
    "type": "vcs",
    "url": "/home/sammitch/src/Foo"
}],

然后 composer update

原文由 Sammitch 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 522
2 个回答

您可以使用 Composer 的 存储库 功能

https://getcomposer.org/doc/05-repositories.md#path

 {
  "repositories": [
    {
        "type": "path",
        "url": "../../packages/my-package"
    }
  ],
  "require": {
    "my/package": "*"
  }
}

不要使用 http 格式,而是指定磁盘上的文件路径。

原文由 Danny Kopping 发布,翻译遵循 CC BY-SA 4.0 许可协议

链接到本地开发包的方法是首先添加主项目的 composer.json 存储库,如下所示:

 "repositories": [
    {
        "type": "path",
        "url": "/full/or/relative/path/to/development/package"
    }
]

您还需要在开发包的 composer.json 中指定一个版本,或者我这样做的方式是要求使用 @dev 的包,如下所示:

 composer require "vendorname/packagename @dev"

它应该输出:

 - Installing vendor/packagename (dev-develop)
Symlinked from /full/or/relative/path/to/development/package

require 命令中的 @dev 很重要,composer 使用它来获取源代码并将其符号链接到您的新包。

这是添加到版本约束的稳定性标志(请参阅 包链接)。

这些允许您进一步限制或扩展包的稳定性,使其超出 最小稳定性 设置的范围。

最低稳定性标志是:

Available options (in order of stability) are dev , alpha , beta , RC , and stable .

原文由 Dhiraj Gupta 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题