跳转到主要内容

Drupal 9 中使用composer管理模块和主题的一些注意事项

在选择使用Composer管理drupal网站依赖的之前,需要知道为什么要使用composer,然后我们再说明使用方法和注意的细节。

一.为什么要使用Composer来管理依赖?

根本的原因是当前的drupal已经按照composer体系进行构建,使用composer创建项目,安装依赖,更新依赖都非常简单快捷。

1.有一部分常用的模块module,在安装的时候是需要使用第三方库的,比如让你把依赖拷贝到libraries目录之类,具体到不同模块,详细说明各不相同,稍不注意就掉坑里。而使用Composer来安装依赖的时候,这些三方依赖会被自动安装到对应的目录,简单一行命令即可。

2.一些模块module可能依赖特定的PHP版本或者Symfony版本,如果没有详细阅读模块说明,手动安装将变得非常繁琐。

使用方法可以参考如何使用Composer来管理依赖

二.关于composer.json和composer.lock在使用中的问题

在使用composer过程中,常见的命令有update,install和require,区别如下:

1.使用composer install命令时,composer先检查composer.lock文件是否存在,如果存在,则从composer.lock中锁定的内容安装指定的版本,不存在则根据composer.json创建一个lock文件再执行安装。此操作通常再团队开发时使用,确保成员之间使用的是一样的包环境。本地开发测试完成后,可以直接使用lock部署到产品服务器中。

2.使用composer update时,这个命令会先按照composer.json文件的依赖关系进行指定版本的安装,安装完之后创建lock文件,方便以后环境迁移或同步时直接install。通常由于版本号书写方法错误的原因,可能导致出现nothing to do的情况,这个时候可以直接将正确的目标版本号直接写入composer.json,然后运行命令composer update --lock生成lock文件,然后直接执行install来安装。

composer update drupal/MODULE_NAMEA drupal/MODULE_NAMEB --with-dependencies
#也可以使用通配符
composer update "drupal/*" --with-dependencies
#或者干脆lock里面的所有依赖全部都更新并保存lock
composer update

3.临时需要安装单个模块而不像手动编辑composer.json的时候,使用如下命令

composer require "drupal/MODULE_NAME:^NEW_VERSION" --update-with-dependencies

这个命令,实际上是先更新依赖到composer.json,然后执行上面的update操作,非常的方便~~

三.关于composer 1.x和2的区别及使用注意

composer 2采用了并行下载元素据和包,速度更快,也就意味着创建项目和下载module及主题变得更加快捷,不过国内下载drupal相关包还是难以忍受;

composer 2不在需要为内存分配不足导致的下载失败烦恼了,直接使用composer命令即可。

升级到composer 2方法:composer self-update --2

如果升级之后需要回滚:composer self-update --1

在升级到composer 2之后如果composer.lock中保留了composer 1的一些依赖(如composer-plugin-api),可能会导致require等操作失败,备份并删除lock文件,然后在composer.json文件中去掉旧的依赖即可。

参考:

https://www.hook42.com/blog/developer-quick-tips-updating-modules-using-composer-update-vs-composer-require

https://www.grazitti.com/blog/why-composer-is-the-best-practices-for-updating-drupal-8-core-and-modules/

https://medium.com/@favoriabs/composer-install-vs-composer-update-3737357c35a7

https://blog.csdn.net/wulove52/article/details/78392663

分类