使用自定义包

有时候我们不想将 composer 下载的包放在 vendor 目录下. 则可以通过官方扩展插件 composer/installers 来做到.

譬如说, 修改我们想要移动的包的下载路径. 则可以先修改需要下载的包的 package.json

{
    "name": "you/ftp",
    "type": "cakephp-plugin",
    "require": {
        "composer/installers": "~1.0"
    },
		"extra": {
         "installer-name": "Ftp" 
    }
}

其中 type 表示, 这个包是一个特定类型的插件. extra.installer-name 指定项目最终名称.

然后我们可以在需要依赖该包的项目中, 修改 package.json , 增加如下参数

{
    "extra": {
        "installer-paths": {
            "${安装保存的路径}": ["you/ftp"]
        }
    }
}

这样就会将 you/ftp 这个包安装到指定路径. 还可以通过填写参数如 ["type:wordpress-plugin"] 或者 ["vendor:you"] 指定符合相应条件的包.

具体参考官方文档, 了解包和类型匹配的支持语法以及路径中支持的替换令牌(例如{$name})。

composer/installers

扩展installers 支持任意包类型

上面的这种方式有种局限,在于需要是软件包作者, 修改相应的 type 才能实现.

我们可以通过另一个插件 oomphinc/composer-installers-extender 来扩展 installers. 使其支持 Library . 这样就无需修改软件包. 直接支持指定路径

在项目中修改 composer.json

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

默认情况下,未指定类型的包将被视为类型库。添加对这种类型的支持允许将这些包中的任何一个放在不同的安装路径中。

如果一个类型已经被添加到“安装程序类型”中,插件将试图在映射中找到一个显式的安装程序路径。如果名称或类型不匹配,将使用所有软件包的默认安装程序路径。