首页 > 解决方案 > 如何从 composer.json 安装单个特定包以安装开发人员工具?

问题描述

我在我的 GitLab CI/CD 管道中使用PHP_CodeSniffer来确保我的代码格式正确。作业如下所示:

stages:
  - test
  - build
  - deploy

coding_standard:
  stage: test
  script:
    - curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
    - php phpcs.phar --extensions=php .

这按预期工作。但是,此处未指定该工具的确切版本。因此,如果突然出现 PHP_Codesniffer 的新主要版本,则 CI/CD 作业可能会失败,尽管我的 PHP 代码没有更改。
此外,我目前在本地机器上全局安装了该工具。这样一来,我就无法为每个 PHP 项目提供特定版本的工具。

现在我想将该工具添加为Composer dev-dependency ( require-dev)。

在 CI/CD 工作中,我会调用composer install而不是通过 curl 下载该工具。

问题:这将不必要地下载所有包,而不仅仅是 PHP_Codesniffer 及其依赖项。我可以防止吗?

标签: phpcomposer-php

解决方案


你不能用作曲家做到这一点。您甚至无法安装“仅开发依赖项”。这是所有的依赖,所有的非开发依赖,仅此而已。

将这种依赖项安装为项目依赖项通常不是一个好主意,因为您很容易因为超出实际应用程序需求的原因而进入依赖地狱。开发工具不应该给您的部署策略带来这种复杂程度和危险。

为了解决这个问题,您可以使用Composer Bin Plugin之类的东西来隔离这些依赖项,然后通过 composer 安装它们。然后在 CI 上,您composer install只在此目录上运行,并从该位置运行该工具(或将其符号链接bin到无论如何,所有依赖项)。


推荐阅读