14

我看到已经有一个问题,但它没有回答这个问题

如何在/src目录中安装捆绑包?

我想这样做的原因是为了开发和部署,所以

  • 我不必将 Symfony 的基本代码签入我的 subversion repo
  • 我可以使用 Composer 来部署

查看 Composer 文档,我确实遇到了这个:

供应商目录:默认为供应商。如果需要,您可以将依赖项安装到不同的目录中。

我可以将其设置为 Bundle 级别吗?或者这是整体安装?

4

4 回答 4

22

我知道这已经晚了,但如果有人正在寻找我辛辛苦苦(几个小时)找到的答案:vendor-dir

文档说:

通过设置此 var,您可以让 composer 将依赖项安装到 vendor 以外的目录中

例子:

{
    "config": {
        "vendor-dir": "website/password/vendor/"
    }
}

这个文档这个文档

再次,希望为其他人节省几个小时。

于 2015-01-01T23:26:33.480 回答
9
{
    "extra": {
        "installer-paths": {
            "sites/example.com/modules/{$name}": ["vendor/package"]
        }
    }
}

阅读更多。

于 2013-11-22T10:20:25.777 回答
2

我已经实现了这个作曲家插件来将包安装到用户(自定义)定义的文件夹中,您可以将其包含在您的 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-06T20:42:15.437 回答
2

如果您发现 composer 的自定义安装程序过于复杂或死板,并且您可以计划将部署到哪些类型的系统,您可以考虑使用安装后脚本。

这是一个示例,它从安装在供应商下的软件包创建符号链接到可能预期的位置:

"scripts": {
    "post-install-cmd": [
        "test -d vendor/foo/bar && ln -s ../vendor/foo/bar lib/bar"
    ]
}

这将创建一个lib/bar/指向的符号链接vendor/foo/bar/

于 2015-04-14T05:27:49.950 回答