在Composer和Drupal中应用补丁程序时出现问题

时间:2019-08-12 14:08:47

标签: composer-php drupal-8

由于我不够彻底,因此需要进行一些澄清。

我有贡献模块Lazyloader。

此补丁创建了我们不喜欢的随机SVG图像。因此,我们想更新代码并创建Gray SVG占位符图像。 使用补丁中的代码进行了一些更新,我基本上希望执行以下操作:

安装Lazyloader

当我应用自制补丁时,会创建3个新目录,但这不应该发生:

  • modules / contrib / lazyloader / b /
  • 模块/ contrib / lazyloader / contrib /
  • 模块/ contrib / lazyloader /模块/

该模块已安装在modules / contrib / lazyloader下,唯一应创建的目录是modules / contrib / lazyloader / css和文件名。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源安装带有我想要的来自drupal.org的补丁的模块 2-进入模块/ contrib / lazyloader 3-我在独立的头部分支中,补丁中的更改 4-进行了我自己的更改,因为在第一部分中我需要来自drupal.org的补丁 5-通过更改创建了自己的补丁程序

工作完美!

1 个答案:

答案 0 :(得分:0)

您的补丁应该在模块git repo本地。路径必须看起来像这样:

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

从头开始,过程应该是这样的:

  1. 从项目的根文件夹中,使用composer从源代码安装lazyloader:
composer require 'drupal/lazyloader:^1.0' --prefer-source
  1. 使用您喜欢的IDE对代码进行更改。
  2. 创建补丁:
cd web/modules/contrib/lazyloader
git diff --staged > name.patch
mv name.patch ../../../../patches/lazyloader/lazyloader-create-black-svg.patch
  1. 您的composer.json看起来不错。下次运行composer install或composer update时,将安装补丁。