在创建新的基于浏览器的JavaScript库时,开发人员通常会选择以下技术之一来解决异步脚本加载和JS库加载的一般不确定性问题:
举一个具体的例子,假设我们有一个带有方法A
的库x
,我们想将其出售给外部用户。
如果我们使用模块,则最终用户将写:
waitForLibrary("A").then((A) => A.x());
并通过存根:
/* Stub module inline/globally */
let A = mockModule({x: recordMethodCalls();});
...
/* Users call x() method normally */
A.x();
...
/* When the full library loads, existing method calls are replayed */
A.x.replay(() => /* Actually do stuff */
但是,每种方法都有其缺点:
A
是用于记录Java脚本错误的库,则只有在{ {1}}个模块加载。除了两种出售JavaScript API的技术之外,还有其他选择吗?
(请注意,要求使用对ES5具有向后兼容性的vanilla.js,因此没有异步功能。)