【发布时间】:2012-08-09 04:32:12
【问题描述】:
我的项目依赖于 ZF 和一个 JS 库。我希望能够将 ZF 库部署到正常位置(vendor/zendframework/zendframework1),然后将我的 JS 库部署到其他地方(public/my-vendor/my-library)。有没有办法做到这一点?
【问题讨论】:
标签: php javascript composer-php
我的项目依赖于 ZF 和一个 JS 库。我希望能够将 ZF 库部署到正常位置(vendor/zendframework/zendframework1),然后将我的 JS 库部署到其他地方(public/my-vendor/my-library)。有没有办法做到这一点?
【问题讨论】:
标签: php javascript composer-php
Composer 旨在管理您的 PHP 依赖项,而不是 JS。
另外,它只支持一个供应商文件夹。
您可能会遵循 Symfony 捆绑包的使用方式:
在我看来,这比在公共文件夹中安装东西更安全(只要您只复制/链接库的公共部分)。
【讨论】:
我遇到了符号链接的想法,但我想自动执行此操作,而不是手动创建符号链接。我打算创建一个作曲家脚本来创建符号链接。然后我发现 Windows 和 *nix 上的符号链接需要以不同的方式创建,这使得这个解决方案变得更加混乱。我发现在作曲家文档中,他们在自定义安装程序页面上讨论了相同类型的问题,并说要解决此问题以创建您自己的自定义安装程序。
【讨论】:
我已经实现了这个作曲家插件来将包安装到用户(自定义)定义的文件夹中,您可以将其包含在您的 composer.json 中,按照示例进行操作,如果您有更多问题,请告诉我 :)
https://github.com/mnsami/composer-custom-directory-installer
作曲家插件,用于在默认作曲家默认安装路径(位于vendor 文件夹中)之外的自定义目录中安装不同类型的作曲家包。
这不是另一个支持非作曲家包类型的composer-installer 库,即application .. 等。这只是为了增加在供应商文件夹之外安装作曲家包的灵活性。这个包只支持composer包类型,
https://getcomposer.org/doc/04-schema.md#type
包的类型。它默认为库。
包类型用于自定义安装逻辑。如果你有一个包需要一些特殊的逻辑,你可以定义一个自定义类型。这可能是一个 symfony-bundle、一个 wordpress-plugin 或一个typo3-module。这些类型都特定于某些项目,它们需要提供能够安装该类型包的安装程序。
composer.json require 部分::"require":{
"php": ">=5.3",
"mnsami/composer-custom-directory-installer": "1.1.*",
"monolog/monolog": "*"
}
extra 部分定义您想要安装包的自定义目录:: "extra":{
"installer-paths":{
"./monolog/": ["monolog/monolog"]
}
通过添加installer-paths 部分,您告诉作曲家将monolog 包安装在根目录的monolog 文件夹中。
composer/installers 一样,换句话说,您可以在installer-path 部分中使用{$vendor} 和{$name} 等变量:李>
"extra": {
"installer-paths": {
"./customlibs/{$vendor}/db/{$name}": ["doctrine/orm"]
}
}
上面将设法将doctrine/orm 包安装在项目的根文件夹中,在customlibs 下。
此安装程序不支持 Composer type: project,因为类型为 project 的软件包仅适用于与 symfony/framework-standard-edition 等应用程序 shell 一起使用,而其他软件包需要这些软件包。
【讨论】:
默认情况下,Composer 读取 composer.json 架构。但是,它也可以使用不同的文件。例如,您可以拥有zendframework.json 和my-library.json。
在zendframework.json中,可以定义:
"config": {
"vendor-dir": "zendframework/vendor"
},
在my-library.json中,可以定义:
"config": {
"vendor-dir": "my-library/vendor"
},
最后,您可以通过这种方式更新库:
COMPOSER=zendframework.json composer update
COMPOSER=my-library.json composer update
这是一个简单的想法。好处是您无需第三方工具即可解决问题。
【讨论】: