使用 Composer 和 Drupal 应用补丁的问题
Issue applying patch with Composer and Drupal
需要一些说明,因为我不够彻底。
我有贡献模块 Lazyloader。
- 我正在应用这个补丁:https://www.drupal.org/files/issues/2018-11-29/lazyloader-LQIP-2905310-6.patch from this issue https://www.drupal.org/project/lazyloader/issues/2905310
此补丁创建了我们不喜欢的随机 SVG 图像。所以我们想更新代码并创建灰色 SVG 占位符图像。
我使用补丁中的代码进行了一些更新,基本上我想执行以下操作:
安装延迟加载器
- 补丁https://www.drupal.org/files/issues/2018-11-29/lazyloader-LQIP-2905310-6.patch
- 用我自己的自定义代码打补丁,这需要以前的补丁。
当我应用自制补丁时,创建了 3 个新目录,但这不应该发生:
- modules/contrib/lazyloader/b/
- modules/contrib/lazyloader/contrib/
- modules/contrib/lazyloader/modules/
该模块已经安装在 modules/contrib/lazyloader 下,唯一应该创建的目录是 modules/contrib/lazyloader/css 和文件 name.css
我试过没有前缀(如果我使用这个就不能应用补丁)
git diff --staged > name.patchhttps://www.drupal.org/project/lazyloader/issues/2905310
我应用补丁...
lando composer update drupal/lazyload
...但它创建了一个我没有包含在补丁中的新目录。
我找到了 this issue,但我不确定这是否会影响我的问题。
我认为这是补丁级别和 cweagans/composer-patches
的问题。
这是我的补丁
diff --git a/modules/contrib/lazyloader/css/grey_svg.css b/modules/contrib/lazyloader/css/grey_svg.css
new file mode 100644
index 000000000..573a3bb74
--- /dev/null
+++ b/modules/contrib/lazyloader/css/grey_svg.css
@@ -0,0 +1,3 @@
+.lazyload {
+ background-color: lightgrey;
+}
diff --git a/modules/contrib/lazyloader/lazyloader.libraries.yml b/modules/contrib/lazyloader/lazyloader.libraries.yml
index 99e023f00..ef4d1c6ff 100644
--- a/modules/contrib/lazyloader/lazyloader.libraries.yml
+++ b/modules/contrib/lazyloader/lazyloader.libraries.yml
@@ -15,3 +15,8 @@ lazysizes-min.cdn:
gpl-compatible: true
js:
https://cdnjs.cloudflare.com/ajax/libs/lazysizes/2.0.0/lazysizes.min.js: { type: external, minified: true }
+
+udesa-grey-svg:
+ css:
+ theme:
+ css/grey_svg.css: {}
diff --git a/modules/contrib/lazyloader/lazyloader.module b/modules/contrib/lazyloader/lazyloader.module
index 24998ed18..dc872356f 100644
--- a/modules/contrib/lazyloader/lazyloader.module
+++ b/modules/contrib/lazyloader/lazyloader.module
@@ -118,3 +118,10 @@ function lazyloader_libraries_info() {
return $libraries;
}
+
+/**
+ * Implements hook_libraries_info().
+ */
+function lazyloader_page_attachments(array &$page) {
+ $page['#attached']['library'][] = 'lazyloader/udesa-grey-svg';
+}
这也是我的 composer.json 补丁
"drupal/lazyloader": {
"Provide option to use a image style as the placeholder image": "https://www.drupal.org/files/issues/2018-11-29/lazyloader-LQIP-2905310-6.patch",
"Create black SVG as placeholder image": "patches/lazyloader/lazyloader-create-black-svg.patch"
}
补丁名称不是问题,我一直在玩弄其中的几个
SOLUTIO > 我知道什么是解决方案
1- 使用 --prefer source 和我想要的补丁安装模块 drupal.org
2- 进入 modules/contrib/lazyloader
3-我在独立的总分支中进行了补丁的更改
4- 进行了我自己的更改,因为我首先需要来自 drupal.org 的补丁
5- 使用我的更改创建了我自己的补丁
工作完美!
你的补丁应该是模块 git 仓库的本地补丁。路径必须如下所示:
diff --git a/lazyloader/css/grey_svg.css b/lazyloader/css/grey_svg.css
而不是:
diff --git a/modules/contrib/lazyloader/css/grey_svg.css b/modules/contrib/lazyloader/css/grey_svg.css
contrib 模块的路径取自您的 composer.json (drupal/lazyloader)
确保您使用的是 contrib 模块 git repo 来创建补丁(不是 drupal 核心)。 https://www.drupal.org/node/707484
从头开始,过程应该是这样的:
- 从您的项目根文件夹,使用 composer 从源代码安装 lazyloader:
composer require 'drupal/lazyloader:^1.0' --prefer-source
- 使用您喜欢的方式对代码进行更改 IDE。
- 创建补丁:
cd web/modules/contrib/lazyloader
git diff --staged > name.patch
mv name.patch ../../../../patches/lazyloader/lazyloader-create-black-svg.patch
- 你的 composer.json 看起来不错。下次您 运行 composer install 或 composer update 时,您的补丁将被安装。
需要一些说明,因为我不够彻底。
我有贡献模块 Lazyloader。
- 我正在应用这个补丁:https://www.drupal.org/files/issues/2018-11-29/lazyloader-LQIP-2905310-6.patch from this issue https://www.drupal.org/project/lazyloader/issues/2905310
此补丁创建了我们不喜欢的随机 SVG 图像。所以我们想更新代码并创建灰色 SVG 占位符图像。 我使用补丁中的代码进行了一些更新,基本上我想执行以下操作:
安装延迟加载器
- 补丁https://www.drupal.org/files/issues/2018-11-29/lazyloader-LQIP-2905310-6.patch
- 用我自己的自定义代码打补丁,这需要以前的补丁。
当我应用自制补丁时,创建了 3 个新目录,但这不应该发生:
- modules/contrib/lazyloader/b/
- modules/contrib/lazyloader/contrib/
- modules/contrib/lazyloader/modules/
该模块已经安装在 modules/contrib/lazyloader 下,唯一应该创建的目录是 modules/contrib/lazyloader/css 和文件 name.css
我试过没有前缀(如果我使用这个就不能应用补丁)
git diff --staged > name.patchhttps://www.drupal.org/project/lazyloader/issues/2905310
我应用补丁...
lando composer update drupal/lazyload
...但它创建了一个我没有包含在补丁中的新目录。
我找到了 this issue,但我不确定这是否会影响我的问题。
我认为这是补丁级别和 cweagans/composer-patches
的问题。
这是我的补丁
diff --git a/modules/contrib/lazyloader/css/grey_svg.css b/modules/contrib/lazyloader/css/grey_svg.css
new file mode 100644
index 000000000..573a3bb74
--- /dev/null
+++ b/modules/contrib/lazyloader/css/grey_svg.css
@@ -0,0 +1,3 @@
+.lazyload {
+ background-color: lightgrey;
+}
diff --git a/modules/contrib/lazyloader/lazyloader.libraries.yml b/modules/contrib/lazyloader/lazyloader.libraries.yml
index 99e023f00..ef4d1c6ff 100644
--- a/modules/contrib/lazyloader/lazyloader.libraries.yml
+++ b/modules/contrib/lazyloader/lazyloader.libraries.yml
@@ -15,3 +15,8 @@ lazysizes-min.cdn:
gpl-compatible: true
js:
https://cdnjs.cloudflare.com/ajax/libs/lazysizes/2.0.0/lazysizes.min.js: { type: external, minified: true }
+
+udesa-grey-svg:
+ css:
+ theme:
+ css/grey_svg.css: {}
diff --git a/modules/contrib/lazyloader/lazyloader.module b/modules/contrib/lazyloader/lazyloader.module
index 24998ed18..dc872356f 100644
--- a/modules/contrib/lazyloader/lazyloader.module
+++ b/modules/contrib/lazyloader/lazyloader.module
@@ -118,3 +118,10 @@ function lazyloader_libraries_info() {
return $libraries;
}
+
+/**
+ * Implements hook_libraries_info().
+ */
+function lazyloader_page_attachments(array &$page) {
+ $page['#attached']['library'][] = 'lazyloader/udesa-grey-svg';
+}
这也是我的 composer.json 补丁
"drupal/lazyloader": {
"Provide option to use a image style as the placeholder image": "https://www.drupal.org/files/issues/2018-11-29/lazyloader-LQIP-2905310-6.patch",
"Create black SVG as placeholder image": "patches/lazyloader/lazyloader-create-black-svg.patch"
}
补丁名称不是问题,我一直在玩弄其中的几个
SOLUTIO > 我知道什么是解决方案
1- 使用 --prefer source 和我想要的补丁安装模块 drupal.org 2- 进入 modules/contrib/lazyloader 3-我在独立的总分支中进行了补丁的更改 4- 进行了我自己的更改,因为我首先需要来自 drupal.org 的补丁 5- 使用我的更改创建了我自己的补丁
工作完美!
你的补丁应该是模块 git 仓库的本地补丁。路径必须如下所示:
diff --git a/lazyloader/css/grey_svg.css b/lazyloader/css/grey_svg.css
而不是:
diff --git a/modules/contrib/lazyloader/css/grey_svg.css b/modules/contrib/lazyloader/css/grey_svg.css
contrib 模块的路径取自您的 composer.json (drupal/lazyloader)
确保您使用的是 contrib 模块 git repo 来创建补丁(不是 drupal 核心)。 https://www.drupal.org/node/707484
从头开始,过程应该是这样的:
- 从您的项目根文件夹,使用 composer 从源代码安装 lazyloader:
composer require 'drupal/lazyloader:^1.0' --prefer-source
- 使用您喜欢的方式对代码进行更改 IDE。
- 创建补丁:
cd web/modules/contrib/lazyloader
git diff --staged > name.patch
mv name.patch ../../../../patches/lazyloader/lazyloader-create-black-svg.patch
- 你的 composer.json 看起来不错。下次您 运行 composer install 或 composer update 时,您的补丁将被安装。