首页 > 解决方案 > 我应该把 composer.json 文件放在哪里?

问题描述

我正在尝试将 composer 用于库,并且在文档中他们告诉我在我的composer.json文件 ( require : xxxx) 中放置一行,但composer.json项目中已经存在一个文件。

我试图阅读有关作曲家的文档,他们说将文件放在主文件夹中。但是已经有一个composer.json文件了。

当我输入require我需要的(setasign/fpdi-fpdf": "^2.0)时,我得到了这个错误(我得到了与命令相同的错误composer require setasign/fpdi-fpdf):

composer require setasign/fpdi-fpdf
Using version ^2.0 for setasign/fpdi-fpdf
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for setasign/fpdi No version set (parsed as 1.0.0) -> satisfiable by setasign/fpdi[No version set (parsed as 1.0.0)].
    - setasign/fpdi-fpdf v2.0.0 requires setasign/fpdi ^2.0 -> satisfiable by setasign/fpdi[v2.0.0, v2.0.1, v2.0.2, v2.0.3].
    - Can only install one of: setasign/fpdi[v2.0.0, No version set (parsed as 1.0.0)].
    - Can only install one of: setasign/fpdi[v2.0.1, No version set (parsed as 1.0.0)].
    - Can only install one of: setasign/fpdi[v2.0.2, No version set (parsed as 1.0.0)].
    - Can only install one of: setasign/fpdi[v2.0.3, No version set (parsed as 1.0.0)].
    - Installation request for setasign/fpdi-fpdf ^2.0 -> satisfiable by setasign/fpdi-fpdf[v2.0.0].


Installation failed, reverting ./composer.json to its original content.

我对作曲家不是很熟悉,所以我不知道如何处理这个错误。

我的composer.json文件如下所示:

{
    "name": "setasign/fpdi",
    "homepage": "https://www.setasign.com/fpdi",
    "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
    "type": "library",
    "keywords": [
        "pdf",
        "fpdi",
        "fpdf"
    ],
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "setasign\\Fpdi\\": "src/"
        }
    },
    "require": {
        "php": "^5.6 || ^7.0",
        "ext-zlib": "*"},
    "authors": [
        {
            "name": "Jan Slabon",
            "email": "jan.slabon@setasign.com",
            "homepage": "https://www.setasign.com"
        },
        {
            "name": "Maximilian Kresse",
            "email": "maximilian.kresse@setasign.com",
            "homepage": "https://www.setasign.com"
        }
    ],
    "suggest": {
        "setasign/fpdf": "FPDI will extend this class but as it is also possible to use \"tecnickcom/tcpdf\" as an alternative there's no fixed dependency configured.",
        "setasign/fpdi-fpdf": "Use this package to automatically evaluate dependencies to FPDF.",
        "setasign/fpdi-tcpdf": "Use this package to automatically evaluate dependencies to TCPDF."
    },
    "require-dev": {
        "phpunit/phpunit": "~5.7",
        "setasign/fpdf": "~1.8",
        "tecnickcom/tcpdf": "~6.2"
    },
    "autoload-dev": {
        "psr-4": {
            "setasign\\Fpdi\\": "tests/"
        }
    }
}

我也在图书馆问题上寻求帮助,有人回答我:

为什么要使用 FPDI 的 composer.json?当然,您需要创建自己的:https ://getcomposer.org/doc/01-basic-usage.md !

这就是为什么我真的不明白。(后来他没有回答我,这就是我在这里的原因)。

我应该覆盖现有composer.json文件吗?或者也许我应该把文件放在另一个地方?

标签: composer-php

解决方案


您的项目中应该有一个 composer.json文件,并且应该在其中添加新的依赖项。但不是在随机的地方,它应该在require部分内部。

因此,如果您的旧composer.json看起来像:

{
    "require": {
        "some-old/dependency": "1.0.*"
    }
}

添加新依赖后,它应该如下所示:

{
    "require": {
        "some-old/dependency": "1.0.*",
        "new/dependency": "^1.6"
    }
}

您要安装的依赖版本的^1.6约束哪里。


如果你不知道如何编辑composer.json,你可以使用 composer 命令来完成这个任务:

composer require new/dependency

它会自动为您添加依赖项composer.json并安装它。它还将为最新版本的依赖项选择约束,所以这可能是做你想做的最简单的方法。


推荐阅读