php - Composer 需要本地包

标签 php composer-php

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

目录结构:

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

理论自动加载语句:[in 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"

添加了 Composer 配置:

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

然后 Composer 更新!

最佳答案

链接到本地​​开发包的方法是首先在主项目的 composer.json 中添加一个 repository,如下所示:

"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 使用它来获取源代码并将其符号链接(symbolic link)到您的新包。

这是一个添加到版本约束中的稳定性标志(参见 package link)。

These allow you to further restrict or expand the stability of a package beyond the scope of the minimum-stability setting.

最低稳定性标志是:

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

关于php - Composer 需要本地包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29994088/

相关文章:

php - 您的要求无法解析为一组可安装的软件包

php - 具有 PSR-4 自动加载功能的 Composer : classes from namespace not loading

php - 带有 Composer 的交互式 PHP 脚本

php - Facebook 字符集检测机制?

PHP 使用系统调用为脚本设置超时,set_time_limit 不起作用

PHP 不发送表单到 MySQL 数据库

javascript - php/html - 三重嵌套引号

php - 将多个php表单数组插入mysql行

package - 从 Composer 中卸载一个软件包而不更新其他所有内容

php - 为什么我的 composer.json 在 composer 安装后自动删除或丢失?