compositor está ignorando la configuración de installer-paths

Intento usar CakePHP por primera vez con el compositor, pero tengo algunos problemas.

Tengo este composer.json :

 { "name": "example.com.br", "repositories": [ { "type": "pear", "url": "http://pear.cakephp.org" } ], "config": { "vendor-dir": "Vendor/" }, "require": { "php": ">=5.4", "pear-cakephp/cakephp": ">=2.4.3", "cakephp/debug_kit": "2.2.*", "smottt/wideimage": "dev-master" }, "extra": { "installer-paths": { "app/Plugin/DebugKit": ["cakephp/debug_kit"], "app/Vendor/Wideimage": ["smottt/wideimage"] } } } 

Cuando ejecuto la composer install (or update) --prefer-dist , todo funciona, excepto smottt/wideimage .

Este paquete se está instalando en la carpeta /Vendor lugar /app/Vendor , por lo tanto, las rutas de acceso del instalador se ignoraron.

De la documentación .

No puede usar esto para cambiar la ruta de ningún paquete. Esto solo es aplicable a paquetes que requieren compositor / instaladores y usan un tipo personalizado que maneja.

De uno de los paquetes que está instalando:

 { "name": "smottt/wideimage", "description": "An open-source PHP library for image manipulation. (With namespaces, PHP 5.3+)", "homepage": "http://wideimage.sourceforge.net", "type": "library", "license": ["GPL-2.0","LGPL-2.1"], "version": "11.02.19", "autoload": { "psr-0" : { "WideImage" : "lib/" } } } 

Entonces, básicamente, el paquete que está tratando de instalar no admite rutas de instalación personalizadas.

Por supuesto, lo que Danack ha dicho es cierto: el plugin compositor-instalador solo admite una lista de selección de tipos de paquetes.

En respuesta a eso, escribí una extensión para el plugin composer-installers que permite que cualquier tipo de paquete arbitrario sea manejado por la directiva "installer-paths" .

Simplemente requiera oomphinc/composer-installers-extender en su composer.json y agregue soporte para cualquier tipo de paquete arbitrario adicional:

 "extra": { "installer-types": ["library"], "installer-paths": { "special/package/": ["my/package"], "path/to/libraries/{$name}/": ["type:library"] } } 

Para paquetes que no especifican un tipo, use la library tipos predeterminada.

Utilice la opción “script” del compositor (trabajo solo con Linux):

 "scripts": { "post-install-cmd": [ "php -r \"system('mv '.getcwd().'/Vendor/smottt/wideimage '.getcwd().'/Vendor/Wideimage');\"" ] }