Javascript requirejs在加载依赖项之前触发回调-有时

Javascript requirejs在加载依赖项之前触发回调-有时,javascript,requirejs,Javascript,Requirejs,我有一个不一致加载的requirejs应用程序。通常,只要我在缓存的内容集上,它就可以工作,但这并不奇怪。然而,清除缓存几乎总是导致脚本不存在 我没有在我的应用程序之外包含依赖项-所有内容都是通过define()依赖项注入包含的 My main.js文件包含以下内容,根据requirejs标准使用data main启动: require.config({ baseUrl: "script/module", paths: { "signals": "vendor/s

我有一个不一致加载的requirejs应用程序。通常,只要我在缓存的内容集上,它就可以工作,但这并不奇怪。然而,清除缓存几乎总是导致脚本不存在

我没有在我的应用程序之外包含依赖项-所有内容都是通过define()依赖项注入包含的

My main.js文件包含以下内容,根据requirejs标准使用data main启动:

require.config({
    baseUrl: "script/module",
    paths: {
        "signals": "vendor/signals"
    }
});

require(["mainController"], function(){
    console.log("Full dependency tree load complete");
});
我的主控制器包含以下内容:

define(
    ["vendor/preloadjs", "router"],
    function (createjs, router) {
        //At this point all controllers are loaded and ready to go
        console.log("main controller"); //This successfully fires every time
        return {};
    }
);
问题出在router.js中:

define(
    ["vendor/crossroads", "vendor/hasher"],
    function(xr, h) {
        console.log(xr, h);
        return {};
    }
);
该文件中的日志通常会为十字路口输出正确的对象(本例中为xr),有时会为哈希器(h)输出正确的对象。但是,10次中有3次或4次(使用缓存刷新时)以及10次中有10次(不使用缓存内容刷新时)会中断。而且它不会持续地破裂。有时交叉点未定义,有时哈希器将是以下对象:

{
    noConflict: ()
    parse: parse()
    runInContext: a(b, d)
    stringify: stringify()
    __proto__: Object
}
有时signals.js(为hasher和crossroads定义的依赖项,在主js文件的路径配置中定义)无法加载,并且我得到了其他错误,例如没有定义signals

我在这里看到的是,我的回调在我的依赖项加载之前启动。所有这三个依赖项都启用了amd/require,并且它们在“某些”时间内工作。require.js的整个要点不是在加载依赖关系树之前不触发回调吗?我错过了什么


谢谢

您在问题中显示的对象看起来像是对库的引用。无论如何,您是否调用
require
main模块或它加载的模块之外的任何地方。我正在处理一个大型框架。我们安装了jQuery和Greensock(TweenMax)。我知道Greensock和jQuery都调用define,但据我所知不需要。如果我不引用这些东西,这会引起问题吗?我甚至都不明白。每次刷新页面时,我都会得到完全不同的结果。这令人沮丧。jQuery不调用
require
。它不依赖于任何东西。间歇性问题的一个常见原因是将RequireJS的配置放入
main
,放入
data main=“main”
但是在主调用
require
之外有一些代码,因为
data main
会导致主模块异步加载,这意味着配置也会异步加载,有时外部
require
会在配置加载后执行,有时不会。然而,这似乎不是你的情况。我强烈建议为你的问题准备一个答案,否则我们只能猜测。事实上,你可能是对的。这些并不是唯一的附加脚本。我们有很多库,但我知道有两个库使用AMD。让我挖过去看看。也就是说,有没有办法对这些东西进行沙箱处理?我看到了一些关于配置上下文的内容,但我不确定这是否会有帮助(尝试过,没有效果)。我会回来处理其他事情。。。谢谢,你帮了我很大的忙。你在问题中展示的对象看起来像是你得到了图书馆的参考资料。无论如何,您是否调用
require
main模块或它加载的模块之外的任何地方。我正在处理一个大型框架。我们安装了jQuery和Greensock(TweenMax)。我知道Greensock和jQuery都调用define,但据我所知不需要。如果我不引用这些东西,这会引起问题吗?我甚至都不明白。每次刷新页面时,我都会得到完全不同的结果。这令人沮丧。jQuery不调用
require
。它不依赖于任何东西。间歇性问题的一个常见原因是将RequireJS的配置放入
main
,放入
data main=“main”
但是在主调用
require
之外有一些代码,因为
data main
会导致主模块异步加载,这意味着配置也会异步加载,有时外部
require
会在配置加载后执行,有时不会。然而,这似乎不是你的情况。我强烈建议为你的问题准备一个答案,否则我们只能猜测。事实上,你可能是对的。这些并不是唯一的附加脚本。我们有很多库,但我知道有两个库使用AMD。让我挖过去看看。也就是说,有没有办法对这些东西进行沙箱处理?我看到了一些关于配置上下文的内容,但我不确定这是否会有帮助(尝试过,没有效果)。我会回来处理其他事情。。。谢谢,你帮了大忙。