Recently i was working on a Magento 2 webshop. It had a bug that when you visited the order grid you would get an exception. It was very generic, from the exception trace i was not possible to find the source. When i had a similar problems in Magento 1 the first step i would do was disable all non-Magento modules. This was simple, just move the xml files of the module you wanted disabled out of the app/etc/modules
directory and you're done.
With Magento 2 this is different: Here you can disable module in 2 ways: Using the bin/magento
command, or editing the app/etc/config.php
file. My preferred way is using the bin/magento
way, as it follows the Magento way.
Hey, I'm running a developer focussed newsletter called MageDispatch.com, which is for the community and by the community. Here you can share links that you think that the community should know about. If you like this kind of technical content you will like this newsletter too.
Disabling modules
The disabling of modules is easy: Just run bin/magento module:disable Vendor_ModuleName
. It also accepts multiple module names: bin/magento module:disable Vendor_ModuleName Vendor2_ModuleName2
. But how do we do disable all non-magento modules? We can using this command:
php bin/magento module:disable $(php bin/magento module:status |grep -vE 'Magento|List|None|^$')
How does this work?
Basically this runs 3 commands:
php bin/magento module:disable
This is pretty straight forward: Disable the specified modules.
php bin/magento module:status
This is also pretty straightforward: It lists all available module. Enabled or disabled.
grep -vE 'Magento|List|^$'
This is where the real magic happens. The output of module:list
is piped to grep. Because we are using the -v
flag, grep works opposite. It filters out all matches, instead of keeping them. The -E
flag is so we can use a regex. The regex searches for:
Magento - Magento_Catalog, Magento_CMS, etc.
List - The module:status command contains this line:
List of disabled modules
None - When all modules are enabled, the list of disabled modules contains the
None
keyword.^$ - Remove any whitespace.
Wrapping
Because we wrapped the last two commands in an $(), that command is executed first. The output of those commands is then passed to the module:disable command. Basically this command is executed:
php bin/magento module:disable Magento_CMS Magento_Catalog Magento_Theme [etc]
Want to respond?