【问题标题】:What's the difference between require and require-dev? [duplicate]require 和 require-dev 有什么区别? [复制]
【发布时间】:2013-05-16 18:51:52
【问题描述】:

我是composer 的新手,我想知道require 和require-dev 之间的区别。 作曲家网站没有很好地解释这两者之间的区别。

我没有得到的部分是来自Composer Official Docs.的Lists packages required for developing this package, or running tests, etc.

【问题讨论】:

    标签: php installation composer-php


    【解决方案1】:

    对我来说似乎很清楚:

    需要

    列出此包所需的包。包裹不会 除非满足这些要求,否则安装。

    require-dev(仅限 root)

    列出开发此包所需的包 (1),或运行测试, 等等。只会安装根包的开发要求 如果使用--dev 运行安装,或者如果在没有--no-dev 的情况下运行更新。

    http://getcomposer.org/doc/04-schema.md


    1。用于开发包的包

    【讨论】:

    • 目前还不清楚“这个包”指的是哪个包。
    • @ScottDavidTesler 这个包你在composer.json文件中提供的包,比如"require-dev": { // this package('s) }
    • @Dagon 谁在乎线程的年龄?人们仍然会关注它,可能会持续很多年。堆栈溢出不是一种普通的论坛,几天后消息就会丢失。
    • "只有在使用--dev 运行安装时才会安装根包的开发要求..." 这已在链接文档中更改为:"根包的开发要求是默认安装。”上述摘录已过时。
    【解决方案2】:

    require-dev 包是对您的项目运行来说不是必需的包,不应包含在生产中您的项目的版本。

    通常,这些是诸如 phpunit/phpunit 之类的包,您只会在开发期间使用。

    【讨论】:

    • 作曲家如何知道它在开发环境中并且应该使用require-dev?
    • @surfer190 我的理解是作曲家不知道;您需要在实时环境中使用 --no-dev 选项执行 composer install 或 update 以避免安装 dev 包,但我可能错了。
    • 你想让作曲家知道吗?
    • @surfer190 默认情况下,“dev”依赖项是为您正在运行的包安装composer install(作曲家将其称为“根包”),但不会为作为依赖项安装的其他包安装。
    • 我认为这里真正的问题是“在 require-dev 中有包是否会让 Composer 对 composer update|require 抱怨 require 中的包?
    【解决方案3】:

    主要区别在于 Composer 只会为“根包”安装 require-dev 依赖项 - 您运行 composer install 的目录。 The documentation 将其描述为:

    根包是composer.json定义的包 您项目的根目录。主要的composer.json 定义了您的 项目要求。

    ...require-dev documentation 指定它是“仅根”。

    实际上,这意味着如果包作为其他东西的依赖项安装(即它安装到另一个项目的vendor 文件夹),则不使用包的require-dev 依赖项。

    因此,如果您在 YourProject 的 require-dev 列表中有 phpunit,我克隆 YourProject 并在 yourproject/ 目录中运行 composer install, Composer 会将phpunit 安装到yourproject/vendor/,因为我可能正在YourProject 上进行一些开发。作为开发的一部分,我可能想要运行 YourProject 的测试套件,为此我需要phpunit。

    但是,如果我将 YourProject 添加为 MyProject 的依赖项,安装 myproject 包也会安装 yourproject 包,但它不会安装phpunit。

    您可以使用--dev 和--no-dev options 覆盖此行为,但默认行为取决于相关包是否为根包 .

    【讨论】:

    • 请注意,其他一些答案引用了 Composer 文档中的部分,这些部分在发布这些答案后发生了变化。引用的部分已过时。
    • 这里最清楚的解释,看完这个其他的就明白了
    • 解释得很清楚。
    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 2013-03-06
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2019-07-17
    相关资源
    最近更新 更多