7

是否可以在 Composer 中指定我们自己的包安装到与vendor/. 我知道我可以指定一个安装所有软件包的文件夹,但这不是我想要的。我希望第三方包最终出现在vendor/我们自己的src/文件夹中。

这可能吗?如果这很重要,我们正在使用 Symfony 2。

4

3 回答 3

6

您可能应该制作自己的安装程序:http: //getcomposer.org/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md并使用自己的installer-paths

于 2012-11-15T07:51:11.897 回答
4

我已经实现了这个作曲家插件来将包安装到用户(自定义)定义的文件夹中,你可以将它包含在你的 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)一起使用,其他包需要。

于 2014-02-05T20:47:27.740 回答
0

如果仍然有问题,请考虑测试我的库(基于mina.nsami的插件):

https://github.com/ideaconnect/composer-custom-directory

允许自定义路径:

"extra":{
    "installer-paths":{
      "./monolog/": ["monolog/monolog"]
}

甚至动态名称替换:

"extra": {
    "installer-paths": {
        "./packages/{$name}": ["sourcepackage/package_A","sourcepackage/package_B","sourcepackage/package_B"]
    }
},

并带有标志链,它允许在运行时简单地操作变量:

当前支持的标志是:

F - capitalizes first letter.
P - changes all entries of a _ or - followed by a character to only that character, capitalized.
于 2014-12-22T14:54:40.533 回答