自定义包的 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自动加载
使用 WPackagist 的 Composer 自定义安装程序路径
安装laravel时确保 /.composer/vendor/bin 在系统路径中啥意思
C# 自定义VS安装项目的安装路径(可以通过程序调用DefaultLocation属性吗)
Composer 安装错误:ZipArchive::extractTo():完整提取路径超过 MAXPATHLEN (260)