fenetikm / autoload-drupal
将 Drupal 模块自动加载到 composer 自动加载器中
Requires
- composer-plugin-api: ^1.1|^2
- composer/composer: *
This package is not auto-updated.
Last update: 2024-09-17 06:34:25 UTC
README
这是一个 Composer 插件,用于将 Drupal 8 模块的自动加载添加到 composer 自动加载器中。
为什么?
你为什么需要这个?Drupal 8 没有自己的自动加载机制吗?
有许多方便的工具(例如静态分析、智能感知)依赖于能够通过 composer 自动加载器加载所有类。不幸的是,由于 Drupal 8 在启动时进行自己的自动加载,使用这些工具至多会变慢(如果你尝试动态启动 Drupal),在最坏的情况下则变得不可能(因为你在虚拟机中运行 Drupal)。一些 IDE(例如 PHPStorm)通过实现自己的发现机制来解决这个问题,但如果你使用的是不这样做的工作区或编辑器,你可能就无计可施了。
这个插件填补了这个空白。
如何实现?
这个插件在很大程度上基于 Composer Merge Plugin。本质上,这个插件在内存中创建一个包含所有指定模块的 composer.json
文件,并将其合并到根 composer.json
文件中,也是在内存中。
安装
在你的 composer.json
中要求插件
标准操作
{ "require": { "fenetikm/autoload-drupal": "1.0.0" } }
配置要自动加载的模块
此插件通过 composer.json
中的 extra
部分进行配置。通常,你希望包含 app/modules/contrib/
、app/core/modules/
和 app/modules/custom/
目录。由于 Drupal 可以以多种方式配置,所以没有做任何假设,因此必须全部添加。
你还可以通过指定一个遵循 [ "directory_to_include", [ "module1", "module2" ] ]
模式数组的数组来限制添加到目录中的模块。
例如
"extra": { "autoload-drupal": { "modules": [ "app/modules/contrib/", "app/core/modules/", [ "app/modules/custom/", [ "my_module" ] ] ] } }
在这里,所有位于 app/modules/contrib/
的模块都被添加进来了,所有位于 app/core/modules/
的模块都被添加进来了,并且只有来自 app/modules/custom/
目录的 my_module
模块被添加进来。
注意:只有具有 src
目录的模块将被添加进来(因为它们符合 PSR 的类自动加载)。
配置类映射
此外,你还可以添加不在模块之外的类。一个典型的例子是添加 Drupal 测试类。例如
"extra": { "autoload-drupal": { "modules": [ "app/modules/contrib/", "app/core/modules/", "app/modules/custom/", ], "classmap": [ "app/core/tests/Drupal/Tests" ] } }
这将添加该目录中所有的类,例如 UnitTestCase
、AssertHelperTraitTest
等。
重新构建自动加载器
包含 Drupal 模块的 composer 自动加载器将在安装和更新时生成。要手动强制刷新它,请执行以下操作
composer dump-autoload
结果
如果你成功设置了它,你将在你的 vendor/composer/autoload_psr4.php
文件中看到类似以下的内容
return array( 'Drupal\\user\\' => array($baseDir . '/app/core/modules/user/src'), 'Drupal\\my_module\\' => array($baseDir . '/app/modules/custom/my_module/src'), 'Drupal\\rad-module\\' => array($baseDir . '/app/modules/contrib/rad-module/src'), 'Drupal\\entity\\' => array($baseDir . '/app/core/modules/entity/src'), );