【问题标题】:Issue applying patch with Composer and Drupal使用 Composer 和 Drupal 应用补丁时出现问题
【发布时间】:2019-08-12 14:08:47
【问题描述】:

需要澄清一下,因为我不够彻底。

我有贡献模块 Lazyloader。

这个补丁创建了我们不喜欢的随机 SVG 图像。所以我们想更新代码并创建一个 Gray SVG 占位符图像。 使用补丁中的代码我做了一些更新,我想基本上做以下事情:

安装懒加载器

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

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

模块已经安装在 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- 使用我的更改创建了我自己的补丁

完美运行!

【问题讨论】:

  • 您可以将补丁上传到某个地方 (pastebin.com) 还是其他地方?你也可以从你的composer.json 中添加行吗?应该看起来像 "patches": { "drupal/lazyloader": { "Your patch description": "./patches/your_patch_file.patch" } }
  • 请改进问题:创建了哪个(3 个)目录?他们全部?您不想创建它们吗?补丁里面到底是什么?请将补丁本身添加到问题中。
  • 我更新了我的问题,希望现在更清楚一点!

标签: composer-php drupal-8


【解决方案1】:

你的补丁应该是模块 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 时,您的补丁将被安装。

【讨论】:

  • 好的,我明白你的意思,但是我怎样才能使它成为可能呢?这是否取决于我创建补丁的位置?我应该从 /modules/contrib/lazyloader 创建它吗? composer.json 中的路径来自哪里?我还没有看到那里的任何路径。另外,感谢您抽出宝贵时间回复!
  • 我假设这是因为您正在使用 drupal git repo 为 contrib 模块创建补丁。您需要安装lazyloader,并在最后添加--prefer-source(这样您将获得lazyloader的git repo),移动到模块文件夹并运行您的'git diff ...'命令。
  • 我对我的问题做了一些更新。我不够清楚,因为我正在更新其他人已经制作的补丁,这就是为什么我想创建一个自定义补丁来存储在我的本地代码中,但它使用了一个已经更新到 Drupal 的补丁,我链接了也是这个问题
  • 我认为这没有什么区别,尽管我只会应用一个自定义补丁,将第一个补丁和您的修改合并到一个文件中。问题仍然在于您如何创建补丁。你在使用lazyloader模块的源文件吗?你在lazyloader目录中运行'git diff...'吗?
  • 我想应用补丁,然后做我自己的更改,但仅限于我的项目,而不是将补丁上传到 drupal,而是使用 /patches/ladyloader/mypatch.patch 的本地目录我是在项目 git 上进行更改,而不是我应该在他们自己的 git 中的lazyloader 中进行更改?哪个是分支 alpha-112134?
猜你喜欢
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多