Atualmente, existe uma maneira de carregar módulos diferentes por ambiente, por exemplo, para carregar a extensão CommerceBug de Alan apenas quando estou no meu ambiente de desenvolvimento?
Como no Magento 1, eu posso .gitignore os arquivos dos módulos no app / code, mas não posso ignorar as alterações no app / etc / config.php facilmente via git.
Não parece possível carregar os módulos definidos no seu env.php, pois o método de carregamento Magento \ Framework \ App \ DeploymentConfig \ Reader usa apenas array_merge, em vez de algum tipo de mesclagem profunda, para mesclar os dados do arquivo e lança uma exceção se semelhante chaves são encontradas.
/**
* Loads the configuration file
*
* @param string $fileKey
* @return array
* @throws \Exception
*/
public function load($fileKey = null)
{
$path = $this->dirList->getPath(DirectoryList::CONFIG);
$fileDriver = $this->driverPool->getDriver(DriverPool::FILE);
$result = [];
if ($fileKey) {
$filePath = $path . '/' . $this->configFilePool->getPath($fileKey);
if ($fileDriver->isExists($filePath)) {
$result = include $filePath;
}
} else {
$configFiles = $this->configFilePool->getPaths();
$allFilesData = [];
$result = [];
foreach (array_keys($configFiles) as $fileKey) {
$configFile = $path . '/' . $this->configFilePool->getPath($fileKey);
if ($fileDriver->isExists($configFile)) {
$fileData = include $configFile;
} else {
continue;
}
$allFilesData[$configFile] = $fileData;
if (!empty($fileData)) {
$intersection = array_intersect_key($result, $fileData);
if (!empty($intersection)) {
$displayMessage = $this->findFilesWithKeys(array_keys($intersection), $allFilesData);
throw new \Exception(
"Key collision! The following keys occur in multiple config files:"
. PHP_EOL . $displayMessage
);
}
$result = array_merge($result, $fileData);
}
}
}
return $result ?: [];
}
Encontrei um problema muito antigo no github levantado pelo @mzeis em https://github.com/magento/magento2/issues/7, que fala sobre várias configurações por ambientes, mas isso foi encerrado.
Seria possível fazer alguns ganchos git que chamam módulo bin / magento: enable e module: disable, mas isso parece uma maneira indireta de obter uma configuração verdadeiramente dependente do ambiente.
php bin/magento setup:upgrade
ouphp bin/magento module:enable <modulename>
. Se o módulo não existe (você gitignored-lo), então não vai ser adicionado ao config.php (ou ele será removido se existia anteriormente)Se você estiver usando o compositor para instalar um módulo, a única maneira não-invasiva de desabilitá-lo é usar o módulo php bin / magento: desabilite o Vendor_Module em algum lugar do seu processo de implantação.
Se você não está usando o compositor e o módulo reside em app / code / Vendor / Module, você deve ignorá-lo em seus vcs. Isso implica que você deve manter uma cópia desse módulo em outro lugar que não seja no seu vcs.
A segunda opção parece ser a melhor. Se você não deseja que esse módulo esteja presente ou ativo em seu ambiente de produção, ele pode ser visto como uma ferramenta de desenvolvimento e não deve fazer parte do seu projeto no vcs.
Também aconselho a ignorar esse tipo de módulo no seu arquivo global de ignorados, e não por projeto. Isso evita falhas.
fonte