在Composer配置中可能忽略子依赖?

Pab*_*blo 10 composer-php

当我运行composer install时,它将安装我的所有"require"和另一个包的"require".

我的composer.json

{
    "name": "my_app",
    "require": {
        "some/package": "0.0.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

"孩子"的依赖

{
    "name": "some/package",
    "require": {
        "zendframework/zend-mail": "2.4.*@dev",
        "soundasleep/html2text": "~0.2",
        "mpdf/mpdf": "6.0.0",
        "endroid/qrcode": "1.*@dev"
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道可以忽略php扩展,但是这些第二个要求包呢?

der*_*asi 23

您可以使用replacecomposer.json 的属性忽略要下载的包:https://getcomposer.org/doc/04-schema.md#replace

这样你告诉作曲家,你自己采取或照顾该包的内容.

这可以帮助您忽略您确定不需要的包,但它有点hacky.所以要注意一些事情(比如测试)可能会破坏.更好的方法是从原始包的维护者处请求补丁,以使需求可选(通过suggest属性).

编辑: "禁用"要求的
示例zendframework/zend-mail:

{
    "name": "my_app",
    "require": {
        "some/package": "0.0.0"
    },
    "replace": {
        "zendframework/zend-mail": "*"
    }
}
Run Code Online (Sandbox Code Playgroud)


Jen*_*och 10

我知道可以忽略 php 扩展,但是这第二个 require 包呢?

是的,您可以使用--ignore-platform-reqs忽略 php、hhvm、lib-* 和 ext-* 平台要求并强制安装,即使本地机器不满足这些要求。

但是,我不确定您是否要提出您的问题。在您的应用程序中需要一个没有依赖项的包的用例是什么?这不是使用 Composer 的主要原因吗?

,这是不可能的,除非您正在寻找require --no-update禁用依赖项自动更新的 。请查看requireinstallCLI 选项


小智 5

另一种解决方法:

  1. 将包克隆到您的存储库并修复依赖项
  2. 在您的composer.json中添加您的存储库:
"repositories": [
    { "type": "git", "url": "https://github.com/zhovtyj/mailchimp-laravel" }
],
"require": {
    "php": "^7.1.3",
    ***
    "skovmand/mailchimp-laravel": "dev-master",
},
Run Code Online (Sandbox Code Playgroud)