多框架 Composer 库安装程序

composer/installers image

composer/installers 统计数据

下载量
76.9M
星标
1,408
开放问题
24
分支
420

在 GitHub 上查看 →

Composer Installers 自述文件


多框架 Composer 库安装程序

这是针对 PHP 包作者,用于在他们的 composer.json 中使用。它会根据指定的包类型将他们的包安装到正确的位置。

Installers 的目标是成为一个简单的包类型到安装路径映射。用户还可以自定义每个包的安装路径,包作者可以在安装时修改包名称。

Installers 并不打算取代所有自定义安装程序。如果你的包需要特殊的安装处理,那么请务必 创建一个自定义安装程序来处理它.

原生支持的框架:

如今大多数框架都原生支持 Composer,并将安装到默认的 vendor 目录。对于使用这些框架的包,**不需要** composer/installers

Composer 2.1+ 中的自定义安装程序替代方案

从 Composer 2.1 开始,Composer\InstalledVersions 类有一个 getInstalledPackagesByType 方法,它可以让你在运行时确定已安装了哪些插件/模块/扩展。

强烈建议你使用它,而不是在构建新应用程序时构建新的自定义安装程序。这样做的优点是将所有供应商代码保留在 vendor 目录中,并且不需要自定义安装程序代码。

当前支持的包类型

稳定的类型标记为**粗体**,这意味着这些类型的安装路径不会更改。对这些类型的任何调整都需要创建新的类型来涵盖所需的更改。

框架 类型
Akaunting akaunting-module
Asgard asgard-module
asgard-theme
Attogram attogram-module
AGL agl-module
Bonefish bonefish-package
AnnotateCms annotatecms-module
annotatecms-component
annotatecms-service
Bitrix bitrix-module (已弃用)
bitrix-component (已弃用)
bitrix-theme (已弃用)

bitrix-d7-module
bitrix-d7-component
bitrix-d7-template
CakePHP 2+ cakephp-plugin
Chef chef-cookbook
chef-role
CiviCrm civicrm-ext
CCFramework ccframework-ship
ccframework-theme
Cockpit cockpit-module
CodeIgniter codeigniter-library
codeigniter-third-party
codeigniter-module
concrete5 concrete5-core
concrete5-package
concrete5-theme
concrete5-block
concrete5-update
Croogo croogo-plugin
croogo-theme
Decibel decibel-app
Dframe dframe-module
DokuWiki dokuwiki-plugin
dokuwiki-template
Dolibarr dolibarr-module
Drupal drupal-core
drupal-module
drupal-theme

drupal-library
drupal-profile
drupal-database-driver
drupal-drush
drupal-custom-theme
drupal-custom-module
drupal-custom-profile
drupal-drupal-multisite
drupal-console
drupal-console-language
drupal-config
Elgg elgg-plugin
Eliasis eliasis-component
eliasis-module
eliasis-plugin
eliasis-template
ExpressionEngine 3 ee3-addon
ee3-theme
eZ Platform ezplatform-assets
ezplatform-meta-assets
FuelPHP v1.x fuel-module
fuel-package
fuel-theme
FuelPHP v2.x fuelphp-component
Grav grav-plugin
grav-theme
Hurad hurad-plugin
hurad-theme
ImageCMS imagecms-template
imagecms-module
imagecms-library
iTop itop-extension
Kanboard kanboard-plugin
Known known-plugin
known-theme
known-console
KodiCMS kodicms-plugin
kodicms-media
Kohana kohana-module
Lan Management System lms-plugin
lms-template
lms-document-template
lms-userpanel-module
Laravel laravel-library
Lavalite lavalite-theme
lavalite-package
Lithium lithium-library
lithium-source
Magento magento-library
magento-skin
magento-theme
majima majima-plugin
Mako mako-package
MantisBT mantisbt-plugin
Matomo matomo-plugin
Mautic mautic-core
mautic-plugin
mautic-theme
Maya maya-module
MODX modx-extra
MODX Evo modxevo-snippet
modxevo-plugin
modxevo-module
modxevo-template
modxevo-lib
MediaWiki mediawiki-extension
Miaoxing miaoxing-plugin
October october-module
october-plugin
october-theme
OntoWiki ontowiki-extension
ontowiki-theme
ontowiki-translation
OXID oxid-module
oxid-theme
oxid-out
Osclass osclass-plugin
osclass-theme
osclass-language
MODULEWork modulework-module
Moodle moodle-* (请 查看源代码 以了解所有支持的类型)
Pantheon quicksilver-script
quicksilver-module
Piwik piwik-plugin
Phifty phifty-bundle
phifty-framework
phifty-library
phpBB phpbb-extension
phpbb-style
phpbb-language
Plentymarkets plentymarkets-plugin
PPI ppi-module
Prestashop prestashop-module
prestashop-theme
Puppet puppet-module
Porto porto-container
ProcessWire processwire-module
RadPHP radphp-bundle
REDAXO redaxo-addon
REDAXO bestyle-plugin redaxo-bestyle-plugin
REDAXO V5.* redaxo5-addon
REDAXO V5.* bestyle-plugin redaxo5-bestyle-plugin
ReIndex reindex-plugin
reindex-theme
Roundcube roundcube-plugin
shopware shopware-backend-plugin
shopware-core-plugin
shopware-frontend-plugin
shopware-theme
shopware-plugin
shopware-frontend-theme
SilverStripe silverstripe-module
silverstripe-theme
SiteDirect sitedirect-module
sitedirect-plugin
SMF smf-module
smf-theme
Starbug starbug-module
starbug-theme
starbug-custom-module
starbug-custom-theme
SyDES sydes-module
sydes-theme
Sylius sylius-theme
TAO tao-extension
TastyIgniter tastyigniter-module
tastyigniter-extension
tastyigniter-theme
Tusk tusk-task
tusk-command
tusk-asset
UserFrosting userfrosting-sprinkle
Vanilla vanilla-plugin
vanilla-theme
Vgmcp vgmcp-bundle
vgmcp-theme
WHMCS whmcs-addons
whmcs-fraud
whmcs-gateways
whmcs-notifications
whmcs-registrars
whmcs-reports
whmcs-security
whmcs-servers
whmcs-social
whmcs-support
whmcs-templates
whmcs-includes
Winter CMS winter-module
winter-plugin
winter-theme
Wolf CMS wolfcms-plugin
WordPress wordpress-plugin
wordpress-theme

wordpress-muplugin
wordpress-dropin
YAWIK yawik-module
Zend zend-library
zend-extra
zend-module
Zikula zikula-module
zikula-theme

composer.json 文件示例

这是一个 CakePHP 插件的示例。您在 `composer.json` 文件中需要设置的唯一重要部分是 `"type": "cakephp-plugin"`,它描述了您的包是什么,以及 `"require": { "composer/installers": "~1.0" }`,它告诉 composer 加载自定义安装程序。

{
"name": "you/ftp",
"type": "cakephp-plugin",
"require": {
"composer/installers": "~1.0"
}
}

这将在用户运行 `php composer.phar install` 时将您的包安装到 CakePHP 应用程序的 `Plugin/Ftp/` 文件夹中。

因此,将您的包提交到 packagist.org

自定义安装路径

如果您需要一个具有支持类型的包,您可以使用 `composer.json` 中的以下额外内容覆盖安装路径

{
"extra": {
"installer-paths": {
"your/custom/path/{$name}/": ["shama/ftp", "vendor/package"]
}
}
}

您可以使用 `type:` 前缀为特定类型的所有包确定非标准安装路径。类型必须是上面支持列表中列出的类型之一。

{
"extra": {
"installer-paths": {
"your/custom/path/{$name}/": ["type:wordpress-plugin"]
}
}
}

您还可以通过使用 `vendor:` 前缀将特定供应商的所有包安装到自定义安装路径。路径仍然只适用于具有支持列表中类型的供应商的包。

{
"extra": {
"installer-paths": {
"your/custom/path/{$name}/": ["vendor:my_organization"]
}
}
}

这些将为每个匹配的包使用您的自定义路径。您可以在路径中使用的可用变量是:`{$name}`、`{$vendor}`、`{$type}`。

注意:如果多个自定义安装程序路径匹配同一个包,将使用第一个匹配的路径。

自定义安装名称

如果您是包作者并且需要在安装时将您的包命名为不同的名称,请考虑使用 `installer-name` 额外内容。

例如,您有一个名为 `shama/cakephp-ftp` 的包,类型为 `cakephp-plugin`。使用 `composer/installers` 安装将安装到 `Plugin/CakephpFtp` 路径。由于严格的命名约定,您作为包作者实际上需要将包命名并安装到 `Plugin/Ftp`。在您的 `composer.json` 中使用以下配置将允许这样做

{
"name": "shama/cakephp-ftp",
"type": "cakephp-plugin",
"extra": {
"installer-name": "Ftp"
}
}

请注意,输入 `installer-name` 的名称将是最终名称,并且不会被词形变化。

禁用安装程序

可能会有时您想从 `composer/installers` 中禁用一个或多个安装程序。例如,如果您正在管理一个使用特定于框架的安装程序的包或项目,该安装程序与 `composer/installers` 冲突,但也有一个依赖于 `composer/installers` 的包。

可以通过指定 `installer-disable` 额外属性来禁用项目的安装程序。如果设置为 `true`、`"all"` 或 `"*"`,则将禁用所有安装程序。

{
"extra": {
"installer-disable": true
}
}

否则,可以指定单个安装程序或安装程序数组。

{
"extra": {
"installer-disable": [
"cakephp",
"drupal"
]
}
}

注意:如果在一个数组中使用全局禁用值 (`true`、`"all"` 或 `"*"`),它将优先于各个安装程序名称。下面的示例将禁用所有安装程序。

{
"extra": {
"installer-disable": [
"drupal",
"all"
]
}
}

我们应该允许动态包类型或路径吗?不

它们是什么?包作者通过在其 `composer.json` 中直接设置路径或通过动态包类型来确定包将安装位置的能力:`"type": "framework-install-here"`。

它已经多次被提出。甚至在早期实现过一次,然后就被删除了。安装程序不会这样做,因为它将允许单个包作者在未经用户同意的情况下擦除整个文件夹。然后那个用户会来这里骂我们。

任何仍然想要此功能的人应该考虑要求 https://github.com/oomphinc/composer-installers-extender

Cube

Laravel 新闻

加入 40,000 多名其他开发人员,不错过任何新提示、教程等。


Composer 安装程序相关文章

Building Package Installers image

构建包安装程序

阅读文章
Sharing PHPCS Rules Across Projects and Teams image

跨项目和团队共享 PHPCS 规则

阅读文章
Composer announces v1.0 image

Composer 宣布 v1.0

阅读文章
Dive into the Streamlined Directory Structure in Laravel 11 image

深入了解 Laravel 11 中的简化目录结构

阅读文章
Updating the Laravel Installer image

更新 Laravel 安装程序

阅读文章
Laravel Installer now includes support for Jetstream image

Laravel 安装程序现在包含对 Jetstream 的支持

阅读文章
Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Lucky Media logo

Lucky Media

现在就来 Lucky - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,以保持您的应用程序新鲜。

Shift
No Compromises logo

没有妥协

Joel 和 Aaron 是来自 No Compromises 播客的两位经验丰富的开发者,现在可以为您的 Laravel 项目聘用。 ⬧ 固定费率 7500 美元/月。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 退款保证。

没有妥协
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,它包含运行现代 SaaS 所需的所有功能。付款、漂亮的结帐、管理面板、用户仪表板、身份验证、现成组件、统计信息、博客、文档等。

SaaSykit:Laravel SaaS 启动工具包