Composerのインストールパスを指定する方法


93

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

{
    "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/ますが、それらをにインストールしたいと思います。これをどのように指定しますか?

回答:


140

あなたは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.*"
    }
}

ニースは、また、私は何とかそれが今ないとして展開したフォルダが深いと行かないように作ることができますplugins/sfGuardPlugin/sfGuardPlugin-4.0.2/、代わりに私がしたいですかplugins/sfGuardPlugin
タワー

ええ、見ただけです。(の代わりにtar)別のタイプを試しています。
j0k

それはうまく機能します-つまり、結局のところ、まだリポジトリがあります:)
タワー

3
特定のパッケージのみにベンダーdirを指定し、他のパッケージをデフォルトのままにする方法はありますか?
mr1031011 2012

1
これはすばらしい研究された答えですが、AdamのV.を
失う

28

「symfony1-plugin」パッケージタイプのマルチフレームワークコンポーザーライブラリインストーラーである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"
    }
}

これが何を指しているのかわかりません。詳しく説明/pluginsできますか?
Isaac Lubow

@IsaacLubow、プラグインがあるので、これはcomposer-installersパッケージによって行われますsymfony1:) Symfony1Installer.phpを
精神

11

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

この変数を設定することで、Composerに依存関係をベンダー以外のディレクトリにインストールさせることができます。

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.