Когда я захожу на подавляющее большинство веб-сайтов, открываю консоль и вставляю следующий код:
(function(global, appName, app) {
if (typeof define === "function" && typeof define.amd === "object") {
console.log("AMD/RequireJS");
define(app);
console.log("defined app");
} else if (typeof module !== "undefined") {
console.log("CommonJS");
module.exports = app(global);
console.log("defined with module.exports");
} else {
console.log("Browser");
global[appName] = app(global);
console.log("defined as global");
}
})(this, "App", function(global) {
"use strict";
console.log("defining getThis");
function getThis() {
console.log('i got it!');
}
return {
getThis: getThis
};
});
console.log("finished IIFE");
App.getThis();
Я получаю следующий вывод:
Browser
defining getThis
defined as global
finished IIFE
i got it!
Если я вставлю этот же код в консоль сайта, который использует RequireJS, например www.bestbuy.com или www.homedepot.com, произойдет сбой с таким выводом:
AMD/RequireJS
defined app
finished IIFE
Uncaught ReferenceError: App is not defined at <anonymous>:27:1
Я пытался изменить строку define(app);
на define(['App'], app);
безрезультатно.
Я уже много часов гуглю и тусуюсь с этим, и я нахожусь в конце. Я думал, что модель UMD была УНИВЕРСАЛЬНОЙ, отсюда и ее название. Что дает?