【问题标题】:Composer ignoring zip dependecies' composer.json fileComposer 忽略 zip 依赖项的 composer.json 文件
【发布时间】:2013-02-08 00:12:30
【问题描述】:

我正在将 Composer 用于需要处理一些依赖项的项目,但我遇到了一个非常奇怪的问题。 Composer 忽略了子包中包含的 composer.json 文件。

我的项目需要检索一些自定义 zip 包,在这些包中,composer.json 文件定义了其他要求。这些需求的仓库在根 composer.json 文件中声明,因为 Composer 不能递归地获取仓库。

问题是,在我的 zip 包被下载、解压并放置在供应商目录中之后,composer 完全忽略了它的 composer.json 定义了其他要求的地方......

zip 存档是这样的:

  • /dir1
  • /dir2
  • 文件1
  • 文件2
  • composer.json

为了让您了解我的根 composer.json 的样子:

{
    "name": "myproject/project",
    "type": "library",
    "repositories": [    
        {
        "packagist" : false 
        },
        {
             "type": "package", 
             "package": {
                 "name" : "giulianobundles/mybundle",
                 "version" : "1",
             "dist": {
                "url": "http://url/to/zip/file",
                     "type": "zip"
                 }
             }
        },
        {
            "type": "package", 
            "package": {
                "name" : "giulianobundles/mybundlerequirement",
                "version" : "1",
        "dist": {
                    "url": "http://url/to/zip/file",
                "type": "zip"
        },
        }
    },  
    ],
    "require": {
        "php": ">=5.3.2",
         "giulianobundles/mybundle": "*"             
    },
    "autoload": {
        "psr-0": {
            "config": "./"
        }
    },
}

包的 composer.json 包看起来像

{
    "name": "giulianobundles/mybundle",
    "type":"library",
    "require": {
        "giulianobundles/mybundlerequirement": "1"
    }
}

Mybundle 包已成功安装,但它的 composer.json 文件被完全忽略。任何想法?我错过了什么?

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    确实,Composer 不会递归地查看文件系统中的 composer.json 文件。它需要查看 存储库 中的 composer.json 文件。它通常的工作方式是一个包在某处有一个 git 或 svn URL。例如,Composer 将直接从存储库中获取 git://<host>/<package>/composer.json,以在安装包之前计算出该包的依赖关系,从而计算整体依赖关系。

    在您的情况下,您在自己的 composer.json 文件中定义了一个 package 内联。 在依赖项中使用它而不是 composer.json 文件。这意味着 Composer 将 "package": { ... } 作为该包的规范 composer.json 文件,它不会查看代码本身;尤其是在打开包装之后。它将 Zip 文件视为没有自己的 composer.json 文件。

    "package": { ... } 中定义依赖关系,或将代码托管在 Composer 可以从中获取 composer.json 文件的版本控制系统中。

    【讨论】:

    • 太棒了!非常感谢 deceze,为了了解这件事在 Composer Docs 中的位置,我真的想明白了这一点?因为我真的寻找它但没有成功 -.-' 问候,
    • 嗯,好问题。我不完全确定这在任何地方都能简洁地解释,尽管我希望它以某种形式表达。这虽然应该是一个很大的危险信号: "package: 如果你依赖一个不支持 composer 的项目,你可以使用 package 存储库内联定义包。你基本上只是内联 @987654327 @对象。” getcomposer.org/doc/04-schema.md#repositories
    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多