【问题标题】:How to get multiple vendor directories with composer?如何使用作曲家获取多个供应商目录?
【发布时间】:2012-08-09 04:32:12
【问题描述】:

我的项目依赖于 ZF 和一个 JS 库。我希望能够将 ZF 库部署到正常位置(vendor/zendframework/zendframework1),然后将我的 JS 库部署到其他地方(public/my-vendor/my-library)。有没有办法做到这一点?

【问题讨论】:

    标签: php javascript composer-php


    【解决方案1】:

    Composer 旨在管理您的 PHP 依赖项,而不是 JS。

    另外,它只支持一个供应商文件夹。

    您可能会遵循 Symfony 捆绑包的使用方式:

    • 在供应商中安装所有内容
    • 在部署过程中将公共资产链接(或复制)到公共目录

    在我看来,这比在公共文件夹中安装东西更安全(只要您只复制/链接库的公共部分)。

    【讨论】:

    • 非常推荐符号链接 +1,这将是我的首选工作方式!
    • 我喜欢这个解决方案,但我会接受我的解决方案,因为作曲家的文档说要在供应商文件夹之外安装某些包。
    • 我可能没有明确说明这一点,但这正是我的意思。不过忘了提及作曲家的安装程序。很高兴它有效!
    • 另外,对于复制/链接这样简单的任务,您可以使用脚本:getcomposer.org/doc/articles/scripts.md
    【解决方案2】:

    我遇到了符号链接的想法,但我想自动执行此操作,而不是手动创建符号链接。我打算创建一个作曲家脚本来创建符号链接。然后我发现 Windows 和 *nix 上的符号链接需要以不同的方式创建,这使得这个解决方案变得更加混乱。我发现在作曲家文档中,他们在自定义安装程序页面上讨论了相同类型的问题,并说要解决此问题以创建您自己的自定义安装程序。

    【讨论】:

      【解决方案3】:

      我已经实现了这个作曲家插件来将包安装到用户(自定义)定义的文件夹中,您可以将其包含在您的 composer.json 中,按照示例进行操作,如果您有更多问题,请告诉我 :)

      https://github.com/mnsami/composer-custom-directory-installer

      composer-custom-directory-installer

      作曲家插件,用于在默认作曲家默认安装路径(位于vendor 文件夹中)之外的自定义目录中安装不同类型的作曲家包。

      这不是另一个支持非作曲家包类型的composer-installer 库,即application .. 等。这只是为了增加在供应商文件夹之外安装作曲家包的灵活性。这个包只支持composer包类型,

      https://getcomposer.org/doc/04-schema.md#type

      包的类型。它默认为库。

      包类型用于自定义安装逻辑。如果你有一个包需要一些特殊的逻辑,你可以定义一个自定义类型。这可能是一个 symfony-bundle、一个 wordpress-plugin 或一个typo3-module。这些类型都特定于某些项目,它们需要提供能够安装该类型包的安装程序。

      如何使用

      • 将 composer 插件包含到您的 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 一起使用,而其他软件包需要这些软件包。

      【讨论】:

        【解决方案4】:

        默认情况下,Composer 读取 composer.json 架构。但是,它也可以使用不同的文件。例如,您可以拥有zendframework.jsonmy-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
        

        这是一个简单的想法。好处是您无需第三方工具即可解决问题。

        【讨论】:

          猜你喜欢
          • 2018-10-27
          • 2016-08-30
          • 1970-01-01
          • 2014-08-08
          • 2018-05-11
          • 1970-01-01
          • 2018-07-07
          • 1970-01-01
          • 2018-09-11
          相关资源
          最近更新 更多