¿Cómo especificar la ruta de instalación de Composer?

93

Tengo esta definición:

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

Estoy usando Symfony 1 y me gustaría instalarlos plugins/sfGuardPlugin/. ¿Cómo especifico esto?

Torre
fuente

Respuestas:

140

Parece que puede definir el vendordirectorio como otra cosa ( pluginsen su caso):

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

Luego, puede cambiar el nombre del paquete para que no tenga un directorio de nivel dentro, como:

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

Entonces, composer.jsondebería verse así:

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

Editar

Con esta configuración, obtendrás la ruta (que por supuesto no es buena para Symfony):

plugins / sfGuardPlugin / sfGuardPlugin-4.0.2 /

Encontré una solución con esto 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
fuente
Bien, también puedo de alguna manera hacer que la carpeta extraída no sea tan profunda como ahora:, en plugins/sfGuardPlugin/sfGuardPlugin-4.0.2/cambio, quiero plugins/sfGuardPlugin?
Torre
Sí, acabo de ver eso. Estoy intentando con un tipo diferente (en lugar de tar).
j0k
Eso funciona bien, por lo que, después de todo, todavía tienen un repositorio :)
Torre
3
¿Hay alguna manera de especificar el directorio del proveedor solo para algunos paquetes específicos y dejar los demás como predeterminados?
mr1031011
1
Esta es una respuesta excelente e investigada, pero no pierda la V. de Adam, porque parece más oficial, oh y fácil ;-)
mTorres
28

También puede utilizar compositor / instaladores , un instalador de biblioteca de compositor de múltiples marcos con el tipo de paquete "symfony1-plugin". Así es como se ve mi archivo composer.json, para que pueda instalar Symfony 1.4 (en lib / vendor) y complementos en (/ 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.
fuente
No veo cómo esto apuntaría algo a /plugins- ¿puede explicarlo?
Isaac Lubow
@IsaacLubow, esto se hará por composer-installerspaquete, ya que symfony1tiene un complemento allí :) Verifique Symfony1Installer.php
espíritu
11

Ver COMPOSER_VENDOR_DIRvariable de entorno.

Al establecer esta var, puede hacer que Composer instale las dependencias en un directorio que no sea proveedor.

Puede ser útil en caso de que desee anular esto en un entorno particular, como vagrant o docker, en el que no querría que esto estuviera en una carpeta / volumen compartido.

Y como dijo J0K, hay vendor-diren configla sección decomposer.json

Predeterminado al proveedor. Puede instalar dependencias en un directorio diferente si lo desea. $ HOME y ~ serán reemplazados por la ruta de su directorio de inicio en vendor-dir y todas las opciones * -dir a continuación.

GabLeRoux
fuente