6

いくつかの依存関係を処理する必要があるプロジェクトに Composer を使用していますが、非常に奇妙な問題が発生しました。Composer は、子パッケージに含まれる composer.json ファイルを無視しています。

私のプロジェクトでは、いくつかのカスタム zip パッケージを取得する必要があります。これらのパッケージでは、composer.json ファイルで他の要件が定義されています。Composer はリポジトリを再帰的に取得できないため、これらの要件のリポジトリはルート composer.json ファイルで宣言されます。

問題は、私の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 ファイルは完全に無視されます。何か案が?私は何が欠けていますか?

4

1 に答える 1

7

実際、Composerはファイルシステム内のcomposer.jsonファイルを再帰的に調べません。リポジトリ内のcomposer.jsonファイルを確認する必要があります。通常は、パッケージのどこかにgitまたはsvnのURLがあります。たとえば、Composerはgit://<host>/<package>/composer.jsonリポジトリから直接フェッチして、全体的な依存関係を計算するためにインストールされる前に、そのパッケージの依存関係を把握します。

あなたの場合、あなたはpackageあなた自身のcomposer.jsonファイルでインラインを定義しています。これは、依存関係のcomposer.jsonファイルの代わりに使用されます。これは、Composerが"package": { ... }そのパッケージの正規のcomposer.jsonファイルであると見なし、コード自体を調べないことを意味します。特にそれを開梱した後ではありません。Zipファイルを独自のcomposer.jsonファイルがないかのように扱います。

依存関係を定義する"package": { ... }か、Composerがcomposer.jsonファイルをフェッチできるバージョン管理システムでコードをホストします。

于 2013-02-22T11:39:01.540 に答える