Drupal Composer 系列三:管理

通过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 包

https://www.npmjs.com/

https://bower.io/

 

怎么使用,有一个联姻

Composer + Bower + NPM = friends forever! 

联姻的结果就是这个网站

https://asset-packagist.org/

有了这个联姻,安装第三方库 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 

正常安装这个自定义依赖包了。

评论 (写第一个评论)