101

私はこの定義を持っています:

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "symfony/sfGuardPlugin",
                "version": "4.0.2",
                "dist": {
                    "url": "http://plugins.symfony-project.org/get/sfGuardPlugin/sfGuardPlugin-4.0.2.tgz",
                    "type": "tar"
                }
            }
        }
    ],
    "require": {
        "symfony/sfGuardPlugin": "4.0.*"
    }
}

私は Symfony 1 を使用しており、それらを にインストールしたいと考えていplugins/sfGuardPlugin/ます。これを指定するにはどうすればよいですか?

4

3 に答える 3

155

vendordirを他の何かpluginsあなたの場合)に定義できるようです:

{
    "config": {
        "vendor-dir": "plugins"
    }
}

次に、次のように、パッケージ名の名前を変更して、内部にレベルディレクトリがないようにします。

        "package": {
            "name": "sfGuardPlugin",

したがって、次のcomposer.jsonようになります。

{
    "config": {
        "vendor-dir": "plugins"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "sfGuardPlugin",
                "version": "4.0.2",
                "dist": {
                    "url": "http://plugins.symfony-project.org/get/sfGuardPlugin/sfGuardPlugin-4.0.2.tgz",
                    "type": "tar"
                }
            }
        }
    ],
    "require": {
        "sfGuardPlugin": "4.0.*"
    }
}

編集

この構成を使用すると、パスを取得できます(もちろん、symfonyには適していません)。

plugins / sfGuardPlugin / sfGuardPlugin-4.0.2 /

私はこれで回避策を見つけましたcomposer.json

{
    "config": {
        "vendor-dir": "plugins"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "sfGuardPlugin",
                "version": "4.0.2",
                "source": {
                    "url": "http://svn.symfony-project.com/plugins/sfGuardPlugin/",
                    "type": "svn",
                    "reference": "branches/1.3/"
                }
            }
        }
    ],
    "require": {
        "sfGuardPlugin": "4.0.*"
    }
}
于 2012-08-09T12:39:47.120 に答える
28

「symfony1-plugin」パッケージタイプのマルチフレームワーク Composer ライブラリインストーラであるcomposer/installersを使用することもできます。Symfony 1.4 (lib/vendor 内) とプラグイン (/plugins) の両方をインストールするために、composer.json ファイルは次のようになります。

{
    "config": {
        "vendor-dir": "lib/vendor"
    },
    "repositories": {
        "symfony": {
            "type": "package",
            "package": {
                "name": "symfony/symfony1",
                "version": "1.4",
                "dist": {
                    "url": "https://github.com/symfony/symfony1/zipball/1.4",
                    "type": "zip"
                }
            }
        },
        "sfResquePlugin" : {
            "type": "package",
            "package": {
                "name": "devpips/sfResquePlugin",
                "type": "symfony1-plugin",
                "version": "0.1",
                "dist": {
                    "url": "https://github.com/devpips/sfResquePlugin/zipball/master",
                    "type": "zip"
                }
            }
        }
    },
    "require": {
        "composer/installers": "dev-master",
        "symfony/symfony1": "1.4",
        "devpips/sfResquePlugin":"0.1"
    }
}
于 2012-08-19T00:16:13.677 に答える
13

COMPOSER_VENDOR_DIR環境変数を参照してください。

この var を設定することで、Composer が依存関係を vendor 以外のディレクトリにインストールするようにすることができます。

vagrant や docker などの特定の環境で、これを共有フォルダー/ボリュームに配置したくない場合に、これをオーバーライドする場合に役立ちます。

そして、J0kが言ったように、のvendor-dirセクションconfigにありますcomposer.json

デフォルトはベンダーです。必要に応じて、依存関係を別のディレクトリにインストールできます。$HOME および ~ は、vendor-dir および以下のすべての *-dir オプションのホーム ディレクトリのパスに置き換えられます。

于 2016-04-18T18:48:27.293 に答える