kingfisherdirect / magento2-env-modules
Magento 2 补丁,允许在 env.php 中定义模块
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.json
的 extra.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/magento2#38016
- https://magento.stackexchange.com/questions/369810/using-env-php-to-override-module-status-in-config-php
Magento 将模块状态保存到 config.php 文件中,该文件应在 Git 仓库中跟踪。每次运行 bin/magento setup:upgrade 时,此文件都会被覆盖。无论模块状态是否更改,新模块是否安装,config.php 中的所有内容都会被覆盖。
默认情况下,Magento 也读取 env.php 文件以获取模块状态。然而,由于对 config.php 的上述覆盖,使用 env.php 不太方便。
此模块通过排除已存在于 env.php 中的模块写入 config.php,来修改默认的 Magento 行为。
重要
仍然可以通过 module:enable
或 module: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:enable
和 module:disable
对 env.php 定义的模块无效。我需要一个有效的解决方案,而不必处理每个场景。