https://medium.com/@atillahalil0/differences-between-javascript-modules-cjs-amd-umd-and-esm-f60124de131b