通过Drupal Composer 系列二:更快,可以解决速度或访问的问题,系列三则回到 Composer 这个工具本身,介绍如何利用它解决实际的问题,充分发挥其 PHP 依赖管理的能力。
一、管理 Drupal 模块、主题
使用 Composer 安装模块、主题,是比较传统的用法,如Drupal Composer 系列一:初识中提到的添加 Bootstrap 主题:
composer require drupal/bootstrap:3.12
这里不做过多介绍,具体请参考 Drupal Composer 系列一:初识提到的相关文档。
二、管理 Drupal 第三方库
Drupal 第三方库一般放在 Drupal 根目录下的 Libraries 文件夹里。比如 Slick 模块就依赖以下第三方库:
-
Slick library:
-
jqeasing,
-
Blazy
有没有一种方式可以让安装第三方库,像上面安装模块一样使用 composer require 就可以搞定呢?
答案是有的。而且还可以使用 npm 和 bower 包
怎么使用,有一个联姻
Composer + Bower + NPM = friends forever!
联姻的结果就是这个网站
有了这个联姻,安装第三方库 Slick 就变成了
composer require bower-asset/slick-carousel
或者
composer require npm-asset/slick-carousel
但是,这样得到的 Slick 库,文件夹名字会是 slick-carousel,并不满足 Slick 项目中对于 Slick 文件夹路径的要求,即 libraries/slick,如果是使用的Drupal Composer 系列一:初识中提到的 Composer template for Drupal projects 则默认位置应该是 web/libraries/slick 。
当然,这个是不需要手动去修改,修改 composer.json 文件的配置即可。
composer.json 文件配置示例:
"require": {
"bower-asset/slick-carousel": "1.8.0",
"drupal/slick": "^1.0",
"oomphinc/composer-installers-extender": "^1.1"
},
"extra": {
"installer-types": ["npm-asset", "bower-asset"],
"installer-paths": {
"web/libraries/slick": ["bower-asset/slick-carousel"],
"web/libraries/{$name}": [
"type:drupal-library",
"vendor:npm-asset",
"vendor:bower-asset"
]
}
}
更多请参考:
https://github.com/oomphinc/composer-installers-extender
三、管理 Drupal 补丁
得益于一个 Composer 的插件:
https://github.com/cweagans/composer-patches
Composer 可以管理补丁,运行 composer install 或 composer require 命令时会自动应用补丁,无需手动运行 patch 或 git patch 等命令。
composer.json 文件示例配置:
"require": {
"cweagans/composer-patches": "^1.6",
},
"extra": {
"patches": {
"drupal/entityreference_dragdrop": {
"call_user_func_array() expects parameter 1 to be a valid callback, function 'entityreference_dragdrop_element_validate' not found": "https://www.drupal.org/files/issues/php_error_warning-2781381-4.patch"
},
"drupal/core": {
"List the jQuery UI dependencies explicitly": "https://www.drupal.org/files/issues/2926155-3.patch",
"Migrate system broken if content_translation enabled": "https://www.drupal.org/files/issues/2018-08-09/2991710-27.patch"
}
}
}
更多请参考相关文档。
四、管理自定义依赖包
我们还可以在 composer.json 文件中自定义依赖包并使用。
composer.json 文件示例配置:
"repositories": [
{
"type": "package",
"package": {
"name": "jungle/demo",
"version": "1.0.0",
"type": "drupal-library",
"dist": {
"url": "https://jungleran.com/demo.1.0.0.zip",
"type": "zip"
}
}
}
],
"require": {
"jungle/demo": "1.0.0",
},
然后就可以使用
composer require jungle/demo:1.0.0 -vvv
正常安装这个自定义依赖包了。