在运行时将AMD模块转换为ES6?

时间:2019-09-08 03:44:52

标签: javascript amd es6-modules

我想使用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导入其他任何地方。

1 个答案:

答案 0 :(得分:0)

Bergi

  

您根本不会编写任何AMD。只需编写import ArrayData from 'select2/array/data';(或您需要的其他任何内容),然后让webpack处理其余的内容即可。

事实证明,select2比大多数库都存在更多问题。它仅增强了jQuery对象,而不导出任何有意义的东西。幸运的是,我不必经历太多的麻烦。

一旦扩充了jQuery对象,调用const ArrayAdapter = $.fn.select2.amd.require("select2/data/array")就会返回我想要的东西。

我的理解是,一旦import "select2"返回,我们可以保证模块已完成加载。因此,我们不需要使用amd.require()的异步形式,因为所有组件都应完全加载。至少到目前为止,我还没有遇到任何错误...

相关问题