@alicloud/console-base-global
Version:
ConsoleBase 唯一官方指定全局变量... 的 API
36 lines (34 loc) • 1.43 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = setGlobalVar;
var _sandboxEscape = require("@alicloud/sandbox-escape");
var _getGlobalVarFromWindow = _interopRequireDefault(require("./get-global-var-from-window"));
var _getGlobalVarLocal = _interopRequireDefault(require("./get-global-var-local"));
/**
* 这个包不会去设置全局变量,而是由 ConsoleBase 主体代码通过调用此方法来设置
*
* 只有调用此方法后,控制台应用才得以
*/
function setGlobalVar(forApp) {
var globalVar = (0, _getGlobalVarFromWindow.default)();
var globalVarLocal = (0, _getGlobalVarLocal.default)();
if (globalVar === globalVarLocal) {
return;
}
if (globalVar) {
// 避免调用两次以上,一般来说不会有这种情况发生
throw new Error('[@alicloud/console-base-global] cannot re-set the global variable with a different object');
}
/**
* messenger 下提供的 forApp 会依赖 SLS,而 SLS 获取产品 ID 会依赖 global,如果这里直接依赖 forApp 将导致循环依赖,即
*
* global ---> messenger ---> forApp ---> sls ---> global
*
* 所以,forApp 的塞入动作放到 console-base 主体代码
*/
globalVarLocal.forApp = forApp;
(0, _sandboxEscape.getWindow)().ConsoleBase = globalVarLocal;
}