自定义包的 Composer 安装路径

Posted

技术标签:

【中文标题】自定义包的 Composer 安装路径【英文标题】:Composer install path for custom package 【发布时间】:2014-05-06 23:17:26 【问题描述】:

我已阅读有关此主题的其他问题,但我似乎无法让它发挥作用。我正在尝试下载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,但是当我想要它(显然)wp-content/plugins/cforms 时,它仍然将它放入 vendor/deliciousdays/cforms。我做错了什么?

【问题讨论】:

【参考方案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",我会接受您的回答。

【讨论】:

我不确定自定义包类型,但对于wordpress-plugin,这似乎覆盖了composer/installers 的值:gist.github.com/a42e9d10dc3d934bcf5b。 composer-installers-extender 可以“解锁”额外的库路径以用于任何包【参考方案2】:

碰巧我有一个答案给你,因为我遇到了同样的问题。显然,现在对自定义安装包的需求很大。

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

我已经实现了这个作曲家插件来将包安装到用户(自定义)定义的文件夹中,您可以将其包含在您的 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 这样的应用程序外壳,而其他软件包需要。

【讨论】:

我看看这个! 嗯,我还没有最终需要这个!到目前为止,我只需将它们定义为"type": "wordpress-plugin""type": "wordpress-theme" 就足够了。为了让它自己安装 wordpress,我最终使用了 fancyguy/webroot-installer"webroot-dir": "./",它会自动解压缩 wordpress 文件夹,获取它的内容,并将其填充到当前目录中。 这正是我想要的。 composer 提供的安装程序插件对我不起作用,因为我正在尝试安装与开源软件无关的自定义软件包。【参考方案3】:

尝试使用这个 composer.json,它包括 Wordpress(目前为 v3.9)。

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

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

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

因此,运行此文件后,您应该拥有正常的 wordpress 结构,其中 cforms 放置在 wp-content/plugins 目录中,要安装主题,您可以复制 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"
    

【讨论】:

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

自定义包的类不会使用composer autoloader自动加载

Composer 安装错误,要求从系统路径中删除

使用 WPackagist 的 Composer 自定义安装程序路径

安装laravel时确保 /.composer/vendor/bin 在系统路径中啥意思

C# 自定义VS安装项目的安装路径(可以通过程序调用DefaultLocation属性吗)

Composer 安装错误:ZipArchive::extractTo():完整提取路径超过 MAXPATHLEN (260)