我已经在使用drupal-composer的自定义模块中找到了依赖关系,如何在不使用Composer Manager的情况下在我的自定义模块中包含第三方库,以及如何管理与drupal 8有关的contrib模块composer依赖关系,这些都与我的问题有关,但是没有自Drupal 8.1和Composer管理器弃用以来,似乎不再适用。
同样流行的指南(如D8和Composer的权威介绍)似乎不再适用,因为它们也提到了composer manager。
与作曲管理器相对的另一种解决方案是更改核心composer.json文件,这感觉像是过多的核心黑客攻击,并且可能会随着Drupal核心(?)的每次Drush更新而中断。
更具体地说,我尝试将View vCard从Drupal 7 更新到8。我创建了composer.json文件,如下所示:
{
"name": "drupal/views_vcards",
"description": "Allows creation of vCards using the fields provided by the Views module.",
"type": "drupal-module",
"license": "GPL-2.0+",
"homepage": "https://drupal.org/project/views_vcards",
"require": {
"maennchen/zipstream-php": "0.3.*"
}
}
但是,如果我在模块文件夹中放置了composer.json文件,如何使Drupal知道该文件在那里,以及如何确保zipstream-php
下载了所需的库?
简单地composer update
从Drupal根目录运行确实会更新许多Drupal依赖关系,但是它不包括modules文件夹中的composer.json文件。我也不认为我应该composer install
从具有依赖性的所有模块中调用。
如何在不使用作曲管理器和/或黑客内核的情况下使Drupal知道模块的依赖性?
更新:
core使用的composer merge插件似乎支持通配符路径:
{
"require": {
"wikimedia/composer-merge-plugin": "dev-master"
},
"extra": {
"merge-plugin": {
"include": [
"composer.local.json",
"extensions/*/composer.json" // < ---- THIS LINE
],
"require": [
"submodule/composer.json"
],
"recurse": true,
"replace": false,
"merge-dev": true,
"merge-extra": false
}
}
}
为什么不合并核心modules/*/composer.json
,这将解决所有问题?
更新2:
composer.json
文件管理所有contrib模块是推荐的新方法,而下载和安装模块的麻烦正在被取代吗?显然,作曲者会自动解析嵌套的依赖项,并且确实还会下载我的依赖项。