你啥时候使用“require-dev”?啥是常见的开发依赖项?

Posted

技术标签:

【中文标题】你啥时候使用“require-dev”?啥是常见的开发依赖项?【英文标题】:When do you use "require-dev"? What are common dev dependencies?你什么时候使用“require-dev”?什么是常见的开发依赖项? 【发布时间】:2013-09-02 10:17:05 【问题描述】:

虽然我熟悉 composer.json 的基础知识并在 require 键下指定依赖项,但我还不太了解 require-dev 的用途 — Composer 的文档指出:

require-dev (root-only)

列出开发此包或运行测试所需的包, 等根包的开发要求由安装 默认。安装或更新都支持 --no-dev 选项 阻止安装开发依赖项。

在抽象上它是有道理的,但我很难想象我需要这个功能的情况。

    require-dev 在工作流中的实际用例有哪些? 是否有应驻留在require-dev 但不在require 中的示例包(或多个包)?

【问题讨论】:

【参考方案1】:

一个常见的例子是 phpunit,您在开发中需要它来运行您的测试套件,但在生产中通常不需要。它也可以是构建工具或类似的东西。不过,将所有内容都放入 require 并没有太大的危害,它只是意味着您在 prod 机器上安装了更多代码,并且可能会根据您的操作方式减慢构建速度。

【讨论】:

Gotchya,所以跟开发中的依赖没有关系? 不,它真的意味着开发你的包需要依赖,它与依赖本身的稳定性无关。 如何设置您的生产机器,让 composer 在您运行“composer install”时识别它在生产机器上? 您并没有真正设置机器,而是设置了部署脚本以便它运行composer install --no-dev 所以唯一的好处是您的vendor 文件夹在您的生产机器上更小?因为如果我使用例如 PHPUnit,那么 venoder/PHPUnit 中的文件只会在我调用类时包含,对吗?这在生产机器上永远不会发生。

以上是关于你啥时候使用“require-dev”?啥是常见的开发依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

详述图片base64加密的原理,告诉你啥是"/9j/"

你啥时候使用“受保护的内部”访问修饰符?

你啥时候使用 Java 的 @Override 注解,为啥?

你啥时候使用 java.util.LinkedList [重复]

你啥时候使用“this”关键字? [关闭]

你啥时候在流中使用接口而不是类型别名?