Composer安装自定义包的路径

时间:2014-03-27 19:02:15

标签: php wordpress-plugin composer-php

我已经阅读了有关此主题的其他问题,而我似乎无法将其付诸实践。我尝试下载cforms作为自定义程序包安装到wp-content/plugins/cforms。我已经将其用于wpackagist提供的其他软件包,甚至是内部开发的一些自定义插件。

以下是我所拥有的:

{
  "name": "mycompany/wordpress-install",
  "description": "Themes and plugins for our wordpress install.",
  "authors": [
    {
        "name": "Me",
        "email": "example@example.net"
    }
  ],
  "require": {
    "deliciousdays/cforms": "14.5.2"
  },
  "repositories": [
    {
      "type": "package",
      "package": {
        "name": "deliciousdays/cforms",
        "version": "14.5.2",
        "dist": {
          "url": "http://www.deliciousdays.com/download/cforms-v14.5.zip",
          "type": "zip"
        }
      }
    }
  ],
  "extra": {
    "installer-paths": {
      "wp-content/plugins/cforms": ["deliciousdays/cforms"]
    }
  }
}

下载cforms很好,但是当我想要它(显然)vendor/deliciousdays/cforms时,它仍然会将它放入wp-content/plugins/cforms。我做错了什么?

3 个答案:

答案 0 :(得分:4)

尝试使用这个composer.json,它包括Wordpress(现在的v3.9)。

它使用fancyguy / webroot-installer安装到某些目录。

此文件应位于root wordpress目录中。额外部分显示“webroot-dir”为“。”;这将安装到当前目录中,(不要使用“/”或“./”),如果您希望将其安装到特定目录中,只需更改“。”到您要安装到的目录的名称。

"extra": {
    "webroot-dir": ".",
    "webroot-package": "wordpress"
}

所以在运行这个文件后你应该有正常的wordpress结构,在wp-content / plugins目录中放置cforms,安装一个主题,你可以复制cforms部分并将类型更改为“wordpress-theme”它安装在主题目录中。

我绝不是作曲家的专家,但我能够正常工作。

{
  "name": "mycompany/wordpress-install",
  "description": "Themes and plugins for our wordpress install.",
  "authors": [
    {
        "name": "Me",
        "email": "example@example.net"
    }
  ],
  "repositories": [
    {
        "type": "composer",
        "url": "http://wpackagist.org"
    },
    {
        "type": "package",
        "package": {
            "name": "wordpress",
            "type": "webroot",
            "version": "3.9",
            "dist": {
                "type": "zip",
                "url": "https://github.com/WordPress/WordPress/archive/3.9.zip"
            }
        }
    },
    {
        "type": "package",
        "package": {
            "name": "cforms",
            "type": "wordpress-plugin",
            "version": "14.5.2",
            "dist": {
                "url": "http://www.deliciousdays.com/download/cforms-v14.5.zip",
                "type": "zip"
             }
        }
    }
 ],
    "require": {
      "php": ">=5.3.0",
      "composer/installers": "~1.0",
      "wordpress": "3.9",
      "fancyguy/webroot-installer": "1.0.0",
      "wpackagist/wordpress-seo": "*",
      "cforms": "14.5.2"
    },
    "extra": {
        "webroot-dir": ".",
        "webroot-package": "wordpress"
    }

}

请注意,使用wpackagist,您可以在以下链接中查看可安装插件/主题的列表:

http://plugins.svn.wordpress.org/

http://themes.svn.wordpress.org/

如果您想要包含Wordpress插件存储库中的插件,您可以轻松添加它们。例如,如果你想添加Yoast Wordpress SEO插件,你可以添加以下要求(注意你需要知道插件的slug来添加它):

    "require": {
      "php": ">=5.3.0",
      "composer/installers": "~1.0",
      "wordpress": "3.9",
      "fancyguy/webroot-installer": "1.0.0",
      "wpackagist/wordpress-seo": "*",
      "cforms": "14.5.2"
    }

答案 1 :(得分:2)

碰巧我得到了一个答案,因为我遇到了同样的问题。显然,现在需要定制安装包。

composer/installers仅适用于已定义的框架和CMS,但不适用于普通的作曲家程序包。

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

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

作曲家定制目录的安装程序

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

这不是用于支持非作曲家包类型的另一个composer-installer库,即application ..等。这只是为了增加在vendor文件夹之外安装composer包的灵活性。此程序包仅支持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"] } } 等变量{1}}部分:
doctrine/orm

以上将设法在customlibs下的项目的根文件夹中安装type: project包。

注意

此安装程序不支持Composer project,因为类型symfony/framework-standard-edition的包仅适用于{{1}}之类的应用程序shell,这是另一个程序包所必需的。

答案 2 :(得分:1)

最后在尝试了很多不同的事情后想出来了。我想我错过了两件事:

在包装声明中,我将其更改为"type": "wordpress-plugin",然后在要求中我必须添加"composers/installers": "~1.0",因此(请注意extra已完全删除):

{
  "name": "mycompany/wordpress-install",
  "description": "Themes and plugins for our wordpress install.",
  "authors": [
    {
        "name": "Me",
        "email": "example@example.net"
    }
  ],
  "require": {
    "composer/installers": "~1.0.0",
    "deliciousdays/cforms": "14.5.2"
  },
  "repositories": [
    {
      "type": "package",
      "package": {
        "name": "deliciousdays/cforms",
        "version": "14.5.2",
        "type": "wordpress-plugin",
        "dist": {
          "url": "http://www.deliciousdays.com/download/cforms-v14.5.zip",
          "type": "zip"
        }
      }
    }
  ]
}

我仍然无法弄清楚如何将自定义程序包安装到 my 的目录中,即使在那里composer/installers要求也是如此。它似乎忽略了所有内容,直到我向对象添加了一个类型,然后根据composer/installers decided to map it的方式强制它下载到该类型定义的位置。

但我认为现在可以使用...如果有人知道如何下载,比如"myfolder/something/cforms"我会接受你的回答。