【问题标题】:Why composer install --no-dev does not work?为什么 composer install --no-dev 不起作用?
【发布时间】:2017-07-11 13:00:25
【问题描述】:

我正在开发一个包库,它具有常规依赖项和一个开发依赖项。 Composer recommends to not include the composer.lock file for libraries,所以这里是composer.json

{
    "name": "myself/mypackage",
    "require": {
        "php": ">=5.6",
        "nesbot/carbon": "~1.20"
    },
    "require-dev": {
        "phpunit/phpunit": "^6.0"
    }
}

我希望它与运行 PHP 5.6 的应用程序兼容,并且我想使用需要 PHP 7 的最新 PHPUnit 测试工具来开发它。

在 travis 持续集成测试服务器上,我有一个构建矩阵,它在 PHP > 7 上运行 PHPUnit 测试和一个 linting 脚本:

composer install
./lint-php.bash
phpunit

在 PHP

composer install --no-dev
./lint-php.bash

但是,它失败了,因为它忽略了 --no-dev 标志并尝试安装 dev 依赖项。

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - phpunit/phpunit 6.0.7 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement.
    - phpunit/phpunit 6.0.6 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement.
    - phpunit/phpunit 6.0.5 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement.
    - phpunit/phpunit 6.0.4 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement.
    - phpunit/phpunit 6.0.3 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement.
    - phpunit/phpunit 6.0.2 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement.
    - phpunit/phpunit 6.0.1 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement.
    - phpunit/phpunit 6.0.0 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement.
    - Installation request for phpunit/phpunit ^6.0 -> satisfiable by phpunit/phpunit[6.0.0, 6.0.1, 6.0.2, 6.0.3, 6.0.4, 6.0.5, 6.0.6, 6.0.7].

为什么忽略--no-dev 标志?我只想让它安装我的常规依赖项并忽略require-dev 部分。

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    尽管有recommendation,这是因为您没有composer.lock 文件,实际上是a requested feature

    首先,它尝试解决所有依赖。如果这失败,它将中止。接下来,它运行实际安装,此时忽略 dev 依赖项。您的问题是它无法通过解决的第一步。所以并不是它忽略了--no-dev 标志,它只是从未走到那一步。

    选项 1

    如果您包含composer.lock 文件,则它会跳过依赖项解析并直接进入安装,此时它将跳过开发依赖项。

    选项 2

    由于您不包含库,而是一个可执行工具,因此不要与您以后可能包含的其他开发工具之间的潜在依赖冲突作斗争,只需将其完全从 composer 中拉出并使用 phive (The PHAR Installation and Verification Environment)

    【讨论】:

    • 请注意,自 github.com/composer/composer/pull/5224 以来,事情应该有所改变。
    • @vaxquis haha​​,是的,事实上,如果您阅读了该主题,我在 2016 年就评论过该 PR,所以我的回答仍然适用于该上下文:D
    • 是的,我的意思是在 5224 之前情况实际上是更糟 ^_~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2017-03-07
    • 2019-11-18
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多