require和require-dev有什么区别?

sli*_*ier 227 php installation composer-php

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

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

Sco*_*ler 217

require-dev包是包没有必要为您的项目工作,不应该包括在生产项目的版本.

通常,这些是phpunit/phpunit您只在开发期间使用的包.

  • 作曲家如何知道它在开发环境中应该使用`require-dev`? (23认同)
  • @ surfer190我的理解是作曲家不知道; 您需要在实时环境中使用--no-dev选项执行composer install或update以避免安装dev包,但我可能错了. (9认同)
  • @ surfer190默认情况下,为运行`composer install`的程序包安装"dev"依赖项(作者称之为"根程序包"),但不安装作为依赖项安装的其他程序包. (4认同)

小智 52

我觉得很清楚:

要求

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

require-dev(仅限root)

列出开发此软件包 (1)或运行测试等所需的软件包.如果在运行安装时运行安装,--dev或者如果没有运行更新,则将安装根软件包的开发需求--no-dev.

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


1.用于开发包的包

  • 目前还不清楚"这个包"指的是哪个包. (7认同)
  • @Dagon谁在乎线程的年龄?人们仍会看着它,可能多年.堆栈溢出不是一种常见的论坛,几天后消息会丢失. (7认同)
  • "只有在使用`--dev`运行安装时才会安装根软件包的开发需求..."这已经在链接文档中更改为:"默认安装根软件包的开发需求." 上述摘录已过时. (4认同)

Nat*_*ike 40

关键的区别是Composer只会require-dev为"root package" 安装依赖项 - 您运行的目录composer install.文档描述为:

根包是由composer.json项目根目录定义的包.它是composer.json定义项目需求的主要部分.

...并且require-dev文档指定它是"仅root".

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

因此,如果您phpunitYourProjectrequire-dev列表中,并且我克隆了YourProject并在目录中运行,则Composer将安装到,因为我可能正在对YourProject进行一些开发.作为开发的一部分,我可能想要运行YourProject的测试套件,并且我需要这样做.composer installyourproject/phpunityourproject/vendor/phpunit

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

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

  • 这里最清楚的解释是,在读完这个之后,其他人才有意义 (2认同)