将包安装到自定义目录Composer中

问题描述 投票:5回答:4

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

这是我的JSON:

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

现在,当我运行composer安装它所有安装但默认为vendor / aheinze / cockpit我不能为我的生活找出原因。

做过我的研究这应该是正确的代码......任何明显的错误?

干杯。

path install package composer-php
4个回答
2
投票

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

在你的情况下,aheinze/cockpit包不需要composer/installers,你可以在它的composer.json at github中看到。

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

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

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


3
投票

我已经实现了这个作曲家插件来将软件包安装到用户(自定义)定义的文件夹中,你可以将它包含在你的composer.json中,按照示例告诉我你是否还有更多问题:)

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

composer-custom-directory-installer

一个composer插件,用于在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软件包。

注意

此安装程序不支持Composer type: project,因为类型为project的软件包只适用于symfony/framework-standard-edition等应用程序shell,这是另一个软件包所必需的。


0
投票

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

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

0
投票

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

"scripts": {
  "post-autoload-dump": [
    "cp -r vendor/aheinze/cockpit admin"
  ]
},
© www.soinside.com 2019 - 2024. All rights reserved.