Bagaimana cara menentukan jalur instalasi Komposer?

93

Saya memiliki definisi ini:

{
    "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.*"
    }
}

Saya menggunakan Symfony 1, dan saya ingin menginstalnya plugins/sfGuardPlugin/. Bagaimana cara menentukan ini?

Menara
sumber

Jawaban:

140

Tampaknya Anda dapat mendefinisikan vendordir menjadi sesuatu yang lain ( pluginsdalam kasus Anda):

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

Kemudian, Anda dapat mengganti nama paket menjadi tidak memiliki dir level di dalamnya, seperti:

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

Jadi, Anda composer.jsonakan terlihat seperti ini:

{
    "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.*"
    }
}

Edit

Dengan menggunakan konfigurasi ini, Anda akan mendapatkan jalur (yang tentu saja tidak baik untuk symfony):

plugins / sfGuardPlugin / sfGuardPlugin-4.0.2 /

Saya menemukan solusi dengan ini 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.*"
    }
}
j0k
sumber
Bagus, juga dapatkah saya membuatnya sedemikian rupa sehingga folder yang diekstrak tidak sedalam sekarang plugins/sfGuardPlugin/sfGuardPlugin-4.0.2/:, sebaliknya saya mau plugins/sfGuardPlugin?
Menara
Ya, baru saja melihatnya. Saya mencoba dengan jenis yang berbeda (bukan tar).
j0k
Itu berfungsi dengan baik - jadi mereka masih memiliki repositori :)
Tower
3
apakah ada cara untuk menentukan direktori vendor untuk beberapa paket tertentu saja, dan membiarkan yang lain sebagai default?
mr1031011
1
Ini adalah jawaban yang bagus dan telah diteliti, tetapi jangan kehilangan V. Adam, karena tampaknya lebih resmi, oh dan mudah ;-)
mTorres
28

Anda juga dapat menggunakan komposer / penginstal , penginstal pustaka pembuat multi-kerangka kerja dengan jenis paket "symfony1-plugin". Seperti inilah tampilan file composer.json saya, agar dapat menginstal Symfony 1.4 (di lib / vendor) dan plugin di (/ plugins):

{
    "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"
    }
}
Adam V.
sumber
Saya tidak mengerti bagaimana ini akan menunjukkan sesuatu kepada /plugins- dapatkah Anda menjelaskannya?
Isaac Lubow
@IsaacLubow, ini akan dilakukan dengan composer-installerspaket, karena symfony1ada plugin di sana :) Periksa Symfony1Installer.php
spirit
11

Lihat COMPOSER_VENDOR_DIRvariabel lingkungan.

Dengan menyetel var ini, Anda dapat membuat Composer menginstal dependensi ke direktori selain vendor.

Dapat membantu jika Anda ingin menimpa ini di lingkungan tertentu seperti gelandangan atau buruh pelabuhan di mana Anda tidak ingin ini berada di folder / volume bersama.

Dan seperti yang dikatakan J0k, ada vendor-dirdi configbagiancomposer.json

Default untuk vendor. Anda dapat menginstal dependensi ke direktori yang berbeda jika Anda mau. $ HOME dan ~ akan diganti dengan path direktori home Anda di vendor-dir dan semua opsi * -dir di bawah ini.

GabLeRoux
sumber