作曲家自定义存储库包不能拉依赖

时间:2015-10-16 20:00:38

标签: php git composer-php

遇到作曲家的问题。我有一个主要的项目,我正在建立一些我建立的小型库,我希望在我的项目之间更容易地分享。它们还没有准备好发布,所以我不想将它们添加到packagist,但是当我需要1时需要另一个,它会出错,除非我在我的主composer.json上自定义存储库

另外,第三级要求无法解析包装库

Your requirements could not be resolved to an installable set of packages.
 Problem 1
   - ethereal/simpleCache dev-master requires predis/predis ^1.1@dev -> no matching package found.
   - ethereal/simpleCache dev-master requires predis/predis ^1.1@dev -> no matching package found.
    - Installation request for ethereal/simplecache dev-master -> satisfiable by ethereal/simpleCache[dev-master].

主要项目composer.json:

{
"name": "ethereal/SimpleTable",
"type": "project",
"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/mathus13/SimpleConfig.git"
    }
],
"require": {
    "php": ">=5.3.9",
    "doctrine/dbal": "^2.6@dev",
    "ethereal/SimpleConfig": "dev-master"
},
"require-dev": {
    "phpunit/phpunit": "~4.8"
},
"autoload": {
    "psr-4": {
        "Ethereal\\": "lib"
    }
}
}

配置库:在SimpleTable中运行composer update时,除非SimpleTable明确要求,否则不会包含Simple Cache。

{
"name": "ethereal/SimpleConfig",
"type": "project",
"version": "0.0.1",
"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/mathus13/SimpleCache.git"
    }
],
"require": {
    "php": ">=5.3.9",
    "ethereal/SimpleCache": "dev-master"
},
"require-dev": {
    "phpunit/phpunit": "~4.8"
},
"autoload": {
    "psr-4": {
        "Ethereal\\": "lib"
    }
}
}

缓存库:在SimpleTable中运行composer update时,无法解析predis。

{
"name": "ethereal/simpleCache",
"type": "project",
"version": "0.0.1",
"require": {
    "predis/predis": "^1.1@dev",
    "php": ">=5.3.9"
},
"require-dev": {
    "phpunit/phpunit": "~4.8"
},
"autoload": {
    "psr-4": {
        "Ethereal\\": "lib"
    }
}
}

1 个答案:

答案 0 :(得分:3)

ethereal/SimpleTable取决于ethereal/SimpleConfig的开发稳定性,这取决于开发稳定性中的ethereal/SimpleCache,这取决于开发稳定性中的predis/predis(版本1.1没有' t已被释放。)

主包中包含的包不能定义任何稳定性,唯一允许的稳定性是主包中的包。这就是"稳定"默认情况下。

根据" dev-master"你从这条规则中做了一个例外。对于SimpleConfig",但这不是继承的。

您有多种解决方案:

  1. 标记您的软件。标签声明它比" dev"更稳定,通常只在生产中使用标记软件是个好主意。
  2. 包括主程序包中所需的所有自己的程序包,即使它们未直接使用也是如此。这将为它们的一般稳定性添加例外,并允许Composer解决任何子依赖项。
  3. 您可以将"minimum-stability":"dev"添加到主composer.json,但这也允许从分支机构安装所有其他软件包。然而,使用分支是一件非常糟糕的事情,因为您无法轻松返回到更新之前正在运行的版本 - 分支指针仅向前移动。只有标签会永远指向同一个软件。
  4. 添加"prefer-stable":true"是3针对已在稳定版本中提供的软件包引入的问题的某种解决方法。但是你仍然有一个问题,就是无法回到你自己的包装上。早期版本,因为您正在使用分支。
  5. 如果您仍在开发这些软件包,则可能需要依赖分支。但是,一个好的软件包将能够独立开发和测试,除了接口定义(将用于模拟所有内容)之外几乎没有任何外部代码,所以通常将所有代码放在一起,并通常检查出分支的repos是一个编写代码的邀请函,这些代码并没有完全分开。

    如果已经完成了这些包中的任何一个(我说"足够好"),请标记它并依赖于该版本而不是分支。如果发现错误或想要添加新功能,您可以随时发布新版本。