我的项目依赖于 ZF 和一个 JS 库。我希望能够将 ZF 库部署到正常位置(vendor/zendframework/zendframework1),然后将我的 JS 库部署到其他地方(public/my-vendor/my-library)。有没有办法做到这一点?
4 回答
Composer 旨在管理您的 PHP 依赖项,而不是 JS。
此外,它仅支持一个供应商文件夹。
您可能会遵循 Symfony 捆绑包的使用方式:
- 在供应商中安装所有内容
- 作为部署过程的一部分,将公共资产链接(或复制)到公共目录
在我看来,它比在公共文件夹中安装一些东西更安全(只要你只复制/链接库的公共部分)。
我遇到了符号链接的想法,但我想自动化这个而不是手动创建符号链接。我打算创建一个作曲家脚本来创建符号链接。然后我发现 Windows 和 *nix 上的符号链接需要以不同的方式创建,这使得这个解决方案变得更加混乱。我发现在作曲家文档中,他们在自定义安装程序页面上讨论了同样类型的问题,并说要解决这个问题以创建您自己的自定义安装程序。
- 相关文档部分: http ://getcomposer.org/doc/articles/custom-installers.md
- 我的自定义安装程序:https ://github.com/ddelrio1986/zf1-public-asset-installer
我已经实现了这个作曲家插件来将包安装到用户(自定义)定义的文件夹中,你可以将它包含在你的 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
,换句话说,您可以在您的部分中使用{$vendor}
和之类的变量:{$name}
installer-path
"extra": {
"installer-paths": {
"./customlibs/{$vendor}/db/{$name}": ["doctrine/orm"]
}
}
以上将设法将doctrine/orm
包安装在项目的根文件夹中,在customlibs
.
笔记
type: project
此安装程序不支持Composer ,因为具有类型的包project
仅适用于与应用程序外壳(如symfony/framework-standard-edition
)一起使用,其他包需要。
默认情况下,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
这是一个简单的想法。好处是您无需第三方工具即可解决问题。