Recently, one of our clients started to get $.widget is not a function JS error on their Magento 2 store and as a result, customers weren’t able to complete their checkout.
The error was present on Minicart, Product view page, and Checkout page and even changing to default Magento 2 template did not fix the issue. Eventually, I found that the issue was with Magento JS merging and I was able to fix the issue by making the following changes:
I’ve used Magento v2.1.x for a while and then decided to give Magento v2.2.2 a try because why not, upgrading the tech stack is always good, isn’t it?
As usual, I opted in for CLI based installation and Magento was installed successfully, however, I was served a 500 Internal Server Error whenever I tried to access the website.
I’ve learnt from my experience is this error usually occurs when something is wrong with .htaccess file and that’s where I looked for this fix as well.
I removed .htaccess file and the site was back online, however, it still didn’t work properly. I then added the .htaccess file back and the error came up again.
I also looked at the server error log but there wasn’t much information available. Eventually, I decided to play around with apache modules and noticed that mod_version was disabled. I activated mod_version, restarted apache service and hello world, the site was back online.
So in a nutshell:
Check webserver modules – in my case, the problem was with mod_version as it was disabled. Enabling it fixed the issue.
Enable/Disable your htaccess file to see if it resolves your issue
Disable third-party extensions one by one to troubleshoot
If the issue persists, visit the Magento community forums and post your issue there.
Magento is a complex system and it is important to pay close attention to what you code.
One of my clients had a special requirement in which I had to customise the customer login controller to meet the business needs.
One option was to create a custom controller and add a preference in di.xml, and the other option was to write a Magento Plugin. I opted in for the later option.
Everything worked fine on my local and the plugin worked as expected but when it was deployed on the test server, it did not work and returned the following error:
Plugin class Vendor\ModuleName\Plugin doesn't exist
I tried Google, StackOverFlow, Magento community forums and every single website but did not find a solution at all. Eventually, I decided to reiterate the local installation steps to the test server and noticed that on my local I hadn’t used Composer to deploy the package whereas on the test server, the package was deployed using composer.
It was good head start and then I knew the issue is with composer file. After reviewing the file, I found out that everything in the file was fine except the missing PSR-4 element.