Asynchronous 允许用户在加载后使用已编译的RequireJS小部件

Asynchronous 允许用户在加载后使用已编译的RequireJS小部件,asynchronous,requirejs,javascript,Asynchronous,Requirejs,Javascript,我正在使用RequireJS编写一个JS小部件。完成小部件后,我将使用r.js和Almond编译它。一切进展顺利——但我无法找到一种简单的方法让用户在不使用RequireJS的情况下使用小部件——因为小部件代码加载异步(RequireJS使用AMD) 我现在正在忙着等待小部件代码加载,并在检测到它已加载后才使用它。这对用户不是很友好 有没有办法让我们就这样做 var widget = new Widget(); 而不是像这样忙着等待: count = 0; function loadWidg

我正在使用RequireJS编写一个JS小部件。完成小部件后,我将使用r.js和Almond编译它。一切进展顺利——但我无法找到一种简单的方法让用户在不使用RequireJS的情况下使用小部件——因为小部件代码加载异步(RequireJS使用AMD)

我现在正在忙着等待小部件代码加载,并在检测到它已加载后才使用它。这对用户不是很友好

有没有办法让我们就这样做

var widget = new Widget();
而不是像这样忙着等待:

count = 0;

function loadWidget() {
    if (typeof Widget != 'undefined') {
        var p1 = new Widget();
        p1.render();
    } else {
        if (count > 10) {
            console.log('Failed to load the Widget');
            return false;
        }
        setTimeout(loadWidget, 50);
        count++;
    }
}

$(document).ready(function() {
    loadWidget();
});
谢谢

编辑:

我的build.js

({
    name: './lib/almond.js',
    out: './deploy/sdk.min.js',
    baseUrl: '.',
    optimize: 'uglify2',
    mainConfigFile: 'sdk.js',
    include: ['sdk'],
    wrap: true
})
网页上的代码(假定网页上没有其他脚本标记):



不确定在编译js时是否真的需要“data main”。

您需要遵循随附的说明。为了总结文档中的要点,您需要在构建配置中使用以下配置:

wrap: {
    startFile: 'path/to/start.frag',
    endFile: 'path/to/end.frag'
}
并且
start.frag
应该是:

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        define([], factory);
    } else {
        root.Widget = factory();
    }
}(this, function () {
end.frag

    return require('main');
}));
结束片段调用
需要以同步形式进行
,在这种情况下,它是真正的同步的(而不是requirejs本身可以使用的伪同步糖)


我以前试过这个。它起作用了。

hm。。为什么不使用标准的requirejs工作流-将小部件定义为AMD模块,包括页面上的主require文件和内部的require小部件?我不想让用户使用RequireJS-因此我将小部件编译成一个JS文件供使用。你的评论让问题变得更奇怪)在你提到的问题的标题中,你想让用户使用RequireJS,在问题正文中,您还提到您使用RequireJS开发了小部件,并在相反的评论文本中提到了。。请在您的问题中添加一些详细信息或重新措辞谢谢-我更改了标题以使其更清楚。请向我们展示您传递到
r.js
的构建配置,以及您如何在网页中加载您的小部件。谢谢@Louis-我已成功编译了此内容,但在任何地方都找不到“小部件”-您将如何使用它?(您将如何执行“var p=new Widget()”?如果在
root.Widget=factory()
上设置断点,则Widget似乎不可用调试器是否停止在那里?是的:/在删除uglify2优化后,行运行,但root.Widget获得“未定义”值
main
模块如何导出
Widget
    return require('main');
}));