Ver índice de contenidos del libro

6.6. El tipo de repositorio package

Si quieres establecer una dependencia con un proyecto que no soporta ninguno de los tipos de repositorios anteriores, puedes definir el paquete tu mismo a mano mediante el tipo de repositorio package.

El proceso consiste en definir manualmente la misma información que se incluye en los archivos packages.json de los repositorios de tipo composer, pero en este caso solamente para un paquete. Las propiedades que obligatoriamente debes definir son name, version, y dist o source. Este ejemplo muestra cómo crear un paquete para el motor de plantillas Smarty:

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "smarty/smarty",
                "version": "3.1.7",
                "dist": {
                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
                    "type": "zip"
                },
                "source": {
                    "url": "http://smarty-php.googlecode.com/svn/",
                    "type": "svn",
                    "reference": "tags/Smarty_3_1_7/distribution/"
                },
                "autoload": {
                    "classmap": ["libs/"]
                }
            }
        }
    ],
    "require": {
        "smarty/smarty": "3.1.*"
    }
}

Normalmente no se define la parte source porque en este caso no se utiliza.

Nota Este tipo de repositorio tiene varias limitaciones y se aconseja evitarlo a toda costa. Entre otros problemas:

  • Composer no actualiza estos paquetes a menos que cambies a mano su versión mediante la propiedad version.
  • Composer no actualiza las referenicas a los commits, así que si utilizas master como referencia, tendrás que borrar el paquete a mano para forzar a que se actualice. Esto causará problemas por tener un archivo composer.lock inestable.