【发布时间】:2020-01-10 08:04:46
【问题描述】:
我想使用select2 Javascript 库。不幸的是,他们force the use of AMD on their users。
我想在我的代码中专门使用 ES6 模块。有没有办法让 ES6 模块导出由 AMD 异步初始化的变量?例如,我想做这样的事情:
const result = $.fn.select2.amd.require([
"select2/data/array",
"select2/utils"
], function (ArrayData, Utils)
{
return "something";
});
export {result as default};
这样,我可以将 AMD 丑陋的地方包裹起来,并将其作为 ES6 导入到其他任何地方。
【问题讨论】:
-
不确定这是否能解决您的问题,但您看过esm吗?
-
@jfriend00 是的,我想 ES6 导出 select2 库的一个组件。这就是我所要求的,但我无法弄清楚实现。
-
您不能直接导出异步加载的内容,因为模块的导出分配和返回发生在异步操作完成之前。
-
@jfriend00 我们可以导出承诺。问题是我们能否从 AMD 的
require中得到承诺。 -
您不需要得到 AMD 的承诺。您可以将自己的承诺包装在 AMD 负载周围并返回承诺。但是,这将通过 Promise 为您提供一个异步加载的接口,而不是典型的 ES6 接口。
标签: javascript amd es6-modules