将包安装到自定义目录 Composer

Posted

技术标签:

【中文标题】将包安装到自定义目录 Composer【英文标题】:Install package into custom directory Composer 【发布时间】:2015-07-11 04:11:27 【问题描述】:

嘿,我正在尝试使用 composer 将一个包安装到自定义的“管理”目录中。

这是我的 JSON:


  "name": "frontier/installer",
  "description": "The best front end engineer package around",
  "require": 
    "aheinze/cockpit": "*"
  ,
  "extra":
    "installer-paths":
      "admin": ["aheinze/cockpit"]
    
  

现在,当我运行 composer install 时,它会全部安装,但默认为 vendor/aheinze/cockpit,我终生无法弄清楚原因。

我的研究已经完成了,这应该是正确的代码...任何明显的错误?

干杯。

【问题讨论】:

【参考方案1】:

如果你只需要把所有的包都放在“admin”目录下,最好的选择是:


  "config": 
        "vendor-dir": "admin"
  

【讨论】:

【参考方案2】:

安装/dump-autoload后可以使用post-autoload-dump脚本复制包:

"scripts": 
  "post-autoload-dump": [
    "cp -r vendor/aheinze/cockpit admin"
  ]
,

【讨论】:

【参考方案3】:

要在同一目录中安装多个包,您可以遵循此结构

1- 你的路径应该是这样的"modules/patched/$name"

2- 以及您要移动或安装同一目录的任何软件包的数组

"extra":
    "installer-paths": 

        "modules/patched/$name": [
            "drupal/signature_field",
            "drupal/eck",
            "drupal/auto_entitylabel"
        ]

    

包或模块也应该在您的要求部分中。

"require": 
        "composer/installers": "^1.0.24",
        "drupal/auto_entitylabel": "2.x-dev",
        "drupal/signature_field": "^1.0@RC",
        "drupal/eck": "^1.0@alpha",

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

如果您想使用installer-paths 选项,您希望安装在不同路径中的软件包必须需要composer/installers

在您的情况下,aheinze/cockpit 包不需要composer/installers,正如您在其composer.json at github 中看到的那样。

看看composer documentation for custom paths,你会发现它告诉你:

注意:您不能使用它来更改任何包的路径。这仅适用于需要 composer/installers 并使用它处理的自定义类型的包。

这意味着您无法更改此特定软件包的安装路径。 无论如何,我认为没有必要将其安装到与默认 vendor 文件夹不同的目录中。

【讨论】:

以上是关于将包安装到自定义目录 Composer的主要内容,如果未能解决你的问题,请参考以下文章

mui拍照后如何保存到自定义目录中?mui代码如何建文件夹?

如何将R包安装到自定义路径

根据带有参数的wordpress上的位置重定向到自定义网址

将 ORM 安装到自定义 PHP5 框架中

docker将extract添加到自定义目录

如何将视频文件保存到自定义资源库?