Why is js breaking with requirejs in templates on Magento 2 and how to fix?
Finally this is a solutions that works for me.
https://themeforest.net/item/porto-ultimate-responsive-magento-theme/9725864/comments?page=293#comment_16606311
"Kroellie
Finally figured out the solution for javascript messages:
Uncaught TypeError: $(...).swMegamenu is not a function Uncaught TypeError: $(...).stellar is not a function Uncaught TypeError: $(...).owlCarousel is not a function Uncaught TypeError: $.widget is not a function
If you suffer the same, do this:
create a requirejs-config.js in the root of the child theme
app/design/frontend/Smartwave/porto_child and put in the following:
var config = { shim: { jquery: { exports: '$' }, 'Smartwave_Megamenu/js/sw_megamenu': { deps: ['jquery'] }, 'owl.carousel/owl.carousel.min': { deps: ['jquery'] }, 'js/jquery.stellar.min': { deps: ['jquery'] }, 'js/jquery.parallax.min': { deps: ['jquery'] } } };
And change the entries:
<script src="jquery.js" />
<script src="bootstrap/js/bootstrap.min.js" />
<script src="fancybox/js/jquery.fancybox.js" />
To:
<remove src="jquery.js" />
<remove src="bootstrap/js/bootstrap.min.js" />
<remove src="fancybox/js/jquery.fancybox.js" />
Within file:
app/design/frontend/Smartwave/porto_child/Magento_Theme/layout/default_head_blocks.xml
Tada! No more need for merging javascripts, no more javascript errors! I have no need for the fancybox, turned it off, but if you do require it, I guess it should be included in the requirejs as well. "