Wie gebe ich den Composer-Installationspfad an?

93

Ich habe diese Definition:

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

Ich verwende Symfony 1 und möchte sie installieren plugins/sfGuardPlugin/. Wie spezifiziere ich das?

Turm
quelle

Antworten:

140

Es scheint, dass Sie das vendorVerzeichnis als etwas anderes definieren können ( pluginsin Ihrem Fall):

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

Anschließend können Sie den Paketnamen so umbenennen, dass kein Ebenenverzeichnis enthalten ist, z.

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

Du composer.jsonsolltest also so aussehen:

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

Bearbeiten

Mit dieser Konfiguration erhalten Sie den Pfad (was natürlich nicht gut für Symfony ist):

Plugins / sfGuardPlugin / sfGuardPlugin-4.0.2 /

Ich habe eine Problemumgehung gefunden 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
quelle
Schön, kann ich es auch irgendwie so machen, dass der extrahierte Ordner nicht so tief geht wie jetzt: plugins/sfGuardPlugin/sfGuardPlugin-4.0.2/stattdessen will ich plugins/sfGuardPlugin?
Turm
Ja, habe das gerade gesehen. Ich versuche es mit einem anderen Typ (anstelle von tar).
j0k
Das funktioniert gut - also haben sie doch noch ein Repository :)
Tower
3
Gibt es eine Möglichkeit, das Herstellerverzeichnis nur für ein bestimmtes Paket anzugeben und die anderen als Standard zu belassen?
mr1031011
1
Dies ist eine großartige und recherchierte Antwort, aber verlieren Sie nicht Adams V., denn es scheint offizieller zu sein, oh und einfach ;-)
mTorres
28

Sie können auch Composer / Installer verwenden , ein Installationsprogramm für Composer-Bibliotheken mit mehreren Frameworks mit dem Pakettyp "symfony1-plugin". So sieht meine Datei composer.json aus, damit sie sowohl Symfony 1.4 (in lib / vendor) als auch Plugins in (/ plugins) installiert:

{
    "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.
quelle
Ich verstehe nicht, worauf dies hinweisen würde /plugins- können Sie das näher erläutern?
Isaac Lubow
@IsaacLubow, dies wird per composer-installersPaket erledigt , ebenso symfony1wie ein Plugin :) Check Symfony1Installer.php
spirit
11

Siehe COMPOSER_VENDOR_DIRUmgebungsvariable.

Durch Festlegen dieser Variable können Sie Composer veranlassen, die Abhängigkeiten in einem anderen Verzeichnis als dem Hersteller zu installieren.

Kann hilfreich sein, wenn Sie dies in einer bestimmten Umgebung wie Vagrant oder Docker überschreiben möchten, in der dies nicht in einem freigegebenen Ordner / Volume erfolgen soll.

Und wie J0k sagte, gibt es vendor-dirin configAbschnitt voncomposer.json

Der Standardwert ist Vendor. Sie können Abhängigkeiten in einem anderen Verzeichnis installieren, wenn Sie möchten. $ HOME und ~ werden durch den Pfad Ihres Home-Verzeichnisses im Herstellerverzeichnis und alle unten aufgeführten * -dir-Optionen ersetzt.

GabLeRoux
quelle