Composer -是否可以在require-dev中安装包?全局使用一个命令


Composer - Is it possible to install packages in "require-dev" globally with one command?

快速提问,如果我的想法是愚蠢的,请告诉我,如果有更好的方法:

为了创建持续交付管道,我想用"require-dev"声明Composer中各种类型测试所需的一些包。然而,我想知道是否有可能运行安装命令的方式,它会安装在"require-dev"下列出的所有包全局与一个命令?

这将是很好的,因为它将允许我保持最新的测试环境与方便,并允许全局访问所有PHP测试解决方案,我需要。我知道这不是太多的工作,我已经完成了,如果我只是通过手动所有的,但我很好奇知道是否有一个很好的方法来做到这一点,因为我认为下载和所有的手工,给它执行的权利,然后移动到bin/目录全局访问是一种乏味的解决方案。

根据composer的帮助使用global关键字与composer允许在全局composer目录($COMPOSER_HOME)中运行命令。

这意味着当你运行composer global require phpunit/phpunit时,composer会更新它的全局目录,而不是你当时所在的目录。

所以在我的例子中,$COMPOSER_HOME在我的主目录/home/.composer,运行上面的命令将;

  1. 更新/Home/.composer/composer.json文件下载最新的phpunit包到/Home/.composer/vendor目录
  2. 添加一个符号链接到/Home/.composer/vendor/bin目录下的phpunit可执行文件

所以在这一点上,如果我有bin文件夹包含在我的路径中,我将能够在我的系统中运行phpunit,无论我在哪个目录下运行命令。

现在,如果您希望将依赖项作为开发需求的一部分进行安装,那么您需要做的就是在安装(或更新)命令中添加——dev参数,例如composer global require phpunit/phpunit --dev

全局安装应该做什么?

通常的做法是安装Phpunit。现在,如果你有两个项目,一个使用旧版本3.7,一个使用新版本4.6,那么全局安装任何版本都无济于事。

不要全局安装特定包显式使用的依赖项。

但是,在特定版本中不需要或未声明需要的工具,如PHP Codesniffer,可以很容易地通过

集中安装。
composer global require squizlabs/php_codesniffer

然后将生成的~/.composer/vendor/bin路径放入path环境变量中。注意~不能在这里解析,您必须自己做