如何从Require.js导出全局变量? [英] How do I export a global variable from Require.js?

查看:18
本文介绍了如何从Require.js导出全局变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Require.js创建外部库。多亏了Require.js not compiling single js file correctlyRequire.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆