将包安装到自定义目录 Composer

Install package into custom directory Composer

嘿,我正在尝试使用 composer 将软件包安装到自定义 'admin' 目录中。

这是我的 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 我终究无法弄清楚为什么。

经过我的研究,这应该是正确的代码...有明显的错误吗?

干杯。

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

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

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

Note: You cannot use this to change the path of any package. This is only applicable to packages that require composer/installers and use a custom type that it handles.

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

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

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

composer-custom-directory-installer

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

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

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

The type of the package. It defaults to library.

Package types are used for custom installation logic. If you have a package that needs some special logic, you can define a custom type. This could be a symfony-bundle, a wordpress-plugin or a typo3-module. These types will all be specific to certain projects, and they will need to provide an installer capable of installing packages of that type.

如何使用

  • 将作曲家插件添加到您的 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.

备注

Composer type: project 在此安装程序中不受支持,因为类型为 project 的包仅适用于像 symfony/framework-standard-edition 这样的应用程序外壳,而另一个包需要它。

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

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",
}

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

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

如果只需要将所有包放在"admin"目录下,最好的选择是:

{
  "config": {
        "vendor-dir": "admin"
  }
}