这个问题困扰了我一段时间。 我试图从外部调用一个类(可访问性问题),我的代码如上所示。
require(['foo'],
(foo) => {
class Bar {
hello() {
return "hello";
}
}
});
bar = new Bar();
//uncaught ReferenceError: Chart is not defined
我找到了一个解决方法,这是通过使用window.Bar = class Bar ...
完成的。require(['foo'],
(foo) => {
window.Bar = class Bar {
hello() {
return "hello";
}
}
});
bar = new Bar();
//OK
然而,当使用Babel转换它时,这不是一个方便的解决方案。
您是否知道其他更正确的导出/定义此类的方法,以便可以从上层调用它?
提前完成
答案 0 :(得分:1)
你不会。相反,您将在回调中编写完整的模块代码 :
require(['foo'], foo => {
class Bar {
hello() {
return "hello";
}
}
const bar = new Bar();
// ...rest of code here...
});
这是写作需求式模块的正常方式。你不会在脚本的顶层写任何东西,它都在回调中,尤其是要求可以在适当的时候调用它。
答案 1 :(得分:0)
导出/定义此类的正确方法
当你想“导出”东西时,你想要做的就是创建一个模块。为此,您使用define
来电,而非require
。然后,您可以返回要导出的内容。例如:
define(['foo'], (foo) => {
class Bar {
hello() {
return "hello";
}
};
return Bar;
});
如果此代码位于名为bar.js
的文件中并且您正确设置了RequireJS配置,以便RequireJS可以找到它,那么您可以从其他地方执行require(["bar"], function (Bar) {...})
或其他模块可以使用它:
define(["bar"], function (Bar) {
const bar = new Bar();
// do more stuff...
});
require
和define
加载依赖关系并使用已解析的依赖关系执行回调,但只有define
实际定义模块。除非您在模块中,否则没有使用RequireJS“导出”的概念,这意味着您使用define
。