kingfisherdirect/magento2-env-modules

Magento 2 补丁,允许在 env.php 中定义模块

v0.1.1 2024-04-04 14:45 UTC

This package is auto-updated.

Last update: 2024-09-04 15:59:16 UTC


README

补丁防止 Magento 在 config.php 中重复定义 env.php 中的模块,使得按环境管理模块状态更加容易

安装

注意

此补丁尚未在所有情况下完全测试。对我而言它工作正常。

安装补丁源文件

composer require kingfisherdirect/magento2-env-modules

应用补丁

如果尚未安装,请安装 composer patches 插件。

composer require cweagans/composer-patches

注意

有关应用补丁的详细信息,请参阅 Magento 文档

composer.jsonextra.patches 下添加以下内容

"magento/magento2-base": {
    "Skip config.php modules if defined in env.php": "vendor/kingfisherdirect/magento2-env-modules/magento2_setup_install.patch"
}

现在运行 composer install 以执行补丁操作。
对于 git 用户,在成功安装后,您应该在 git status 中观察到未跟踪的文件(src/setup/src/Magento/Setup/Model/Installer.php)。此文件应该被提交。

问题和解决方案

以下讨论中解释得相当详细

Magento 将模块状态保存到 config.php 文件中,该文件应在 Git 仓库中跟踪。每次运行 bin/magento setup:upgrade 时,此文件都会被覆盖。无论模块状态是否更改,新模块是否安装,config.php 中的所有内容都会被覆盖。

默认情况下,Magento 也读取 env.php 文件以获取模块状态。然而,由于对 config.php 的上述覆盖,使用 env.php 不太方便。

此模块通过排除已存在于 env.php 中的模块写入 config.php,来修改默认的 Magento 行为。

重要

仍然可以通过 module:enablemodule:disable 来更改模块状态,这将写入 config.php。当模块在 config.php 和 env.php 中都定义时,将考虑后者文件的状态。

示例使用场景

由于 composer 允许定义 require 和 require-dev 软件包,开发工具可以添加到 require-dev 中,并通过 env.php 手动启用。在生产中,require-dev 软件包不需要安装,因此 config.php 中不应有任何内容。

另一方面,模块可能位于 require 中,这使得它们始终安装。由于模块的 registration.php 文件,它们会自动加载,并且状态将(并且应该)写入 config.php。然后每个环境可以使用 env.php 来禁用模块。

为什么不向 magento/magento2 提交 PR

我不认为这个补丁适合作为 Magento 的默认设置。

此补丁使 module:enablemodule:disable 对 env.php 定义的模块无效。我需要一个有效的解决方案,而不必处理每个场景。