如何从Require.js导出全局变量? [英] How do I export a global variable from Require.js?
本文介绍了如何从Require.js导出全局变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用Require.js创建外部库。多亏了Require.js not compiling single js file correctly和Require.js (almond.js) Timing Off,我已经知道如何将所有内容"编译"到一个优化/构建的文件中,并且这个文件可以正常工作。只有一个问题:我找不到如何为我的库设置变量。
假设我希望我的库创建window.Foo
。我尝试将main.js
文件用于:
window.Foo = require([], function() {
window.Foo = {someValue: 1};
return {someValue: 2};
});
和包装器末尾片段:
return require('main');
}));
如您所见,我试图将foo公开给全局空间,方法是从request调用内部显式设置window.Foo
,并通过end片段的返回值从外部显式设置它。但是这两种方法都不起作用;如果我在加载构建文件后立即添加console.log(window.foo)
,它会告诉我window.Foo
是未定义的。
如果我执行window.setTimeoutwindow.Foo
,最终确实会设置(设置为{someValue: 1}
),但是我不能期望我的用户必须使用超时来包装他们的所有代码。谁能解释一下如何在加载优化/生成文件后立即定义window.Foo
?
推荐答案
如果您遵循James的说明here,您可以轻松地生成一个设计为RequireJS模块捆绑包的库,任何人都可以同步加载。
我有一个GitHubrepository来说明整个过程。要点:
main
模块将Foo
导出到全局空间:define('main', ["./modC"], function () { console.log("inside"); window.Foo = {someValue: 1}; return {someValue: 2}; });
它还返回一个值,该值由开始片段导出为
Bar
(即表示root.Bar = factory();
的那一行)。因此,它说明了两种导出到全局空间的方法。r.js
使用的包装器代码以require
的同步形式启动main:require(`main`);
如果加载它,您将看到以下输出:
outside
loaded modC
inside
out in the HTML!
value of window.Foo: Object {someValue: 1}
value of window.Bar: Object {someValue: 2}
这篇关于如何从Require.js导出全局变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文