Require.js Error: Load timeout for modules: backbone,jquerymobile

JavascriptJquerybackbone.jsRequirejs

Javascript Problem Overview


I am trying to use r.js to optimize my code but I keep running to this error:

Tracing dependencies for: init

Error: Load timeout for modules: backbone,jquerymobile

The command I am running is this:

$ java -classpath /Users/dixond/build-tools/rhino1_7R4/js.jar:/Users/dixond/build-tools/closurecompiler/compiler.jar org.mozilla.javascript.tools.shell.Main /Users/dixond/build-tools/r.js/dist/r.js -o /Users/dixond/Sites/omm_mobile/js/build.js

My build.js file looks like this:

( {
	//appDir: "some/path/",
	baseUrl : ".",
	mainConfigFile : 'init.js',
	paths : {
		jquery : 'libs/jquery-1.8.3.min',
		backbone : 'libs/backbone.0.9.9',
		underscore : 'libs/underscore-1.4.3',
		json2 : 'libs/json2',
		jquerymobile : 'libs/jquery.mobile-1.2.0.min'
	},
	packages : [],
	shim : {
		jquery : {
			exports : 'jQuery'
		},
		jquerymobile : {
			deps : ['jquery'],
			exports : 'jQuery.mobile'
		},
		underscore : {
			exports : '_'
		},
		backbone : {
			deps : ['jquerymobile', 'jquery', 'underscore'],
			exports : 'Backbone'
		}
	},
	keepBuildDir : true,
	locale : "en-us",
	optimize : "closure",
	skipDirOptimize : false,
	generateSourceMaps : false,
	normalizeDirDefines : "skip",
	uglify : {
		toplevel : true,
		ascii_only : true,
		beautify : true,
		max_line_length : 1000,
		defines : {
			DEBUG : ['name', 'false']
		},

		
		no_mangle : true
	},
	uglify2 : {},
	closure : {
		CompilerOptions : {},
		CompilationLevel : 'SIMPLE_OPTIMIZATIONS',
		loggingLevel : 'WARNING'
	},
	cssImportIgnore : null,
	inlineText : true,
	useStrict : false,
	pragmas : {
		fooExclude : true
	},
	pragmasOnSave : {
		//Just an example
		excludeCoffeeScript : true
	},
	has : {
		'function-bind' : true,
		'string-trim' : false
	},
	hasOnSave : {
		'function-bind' : true,
		'string-trim' : false
	},
	//namespace: 'foo',
	skipPragmas : false,
	skipModuleInsertion : false,
	optimizeAllPluginResources : false,
	findNestedDependencies : false,
	removeCombined : false,
	name : "init",
	out : "main-built.js",
	wrap : {
		start : "(function() {",
		end : "}());"
	},
	preserveLicenseComments : true,
	logLevel : 0,
	cjsTranslate : true,
	useSourceUrl : true
})

And my init.js looks like this:

 requirejs.config({
      //libraries
      paths: {
          jquery:       'libs/jquery-1.8.3.min',
          backbone:     'libs/backbone.0.9.9',
          underscore:   'libs/underscore-1.4.3',
          json2 : 		'libs/json2',
          jquerymobile: 'libs/jquery.mobile-1.2.0.min'
      },
    
      //shimming enables loading non-AMD modules
      //define dependencies and an export object
      shim: {
          jquerymobile: {
              deps: ['jquery'],
              exports: 'jQuery.mobile'
          },
          underscore: {
              exports: '_'
          },
          backbone: {
              deps: ['jquerymobile', 'jquery', 'underscore', 'json2'],
              exports: 'Backbone'
          }
      }
    });


requirejs(["backbone",], function(Backbone) {
	//Execute code here
});

What am I doing wrong in this build process?

Javascript Solutions


Solution 1 - Javascript

Require.js has a Config option called waitSeconds. This may help.

RequireJS waitSeconds

Here's an example where waitSeconds is used:

requirejs.config({
    baseUrl: "scripts",
    enforceDefine: true,
    urlArgs: "bust=" + (new Date()).getTime(),
    waitSeconds: 200,
    paths: {
        "jquery": "libs/jquery-1.8.3",
        "underscore": "libs/underscore",
        "backbone": "libs/backbone"
    },
    shim: {
        "underscore": {
            deps: [],
            exports: "_"
        },
        "backbone": {
            deps: ["jquery", "underscore"],
            exports: "Backbone"
        },
    }
});

define(["jquery", "underscore", "backbone"],
    function ($, _, Backbone) {
        console.log("Test output");
        console.log("$: " + typeof $);
        console.log("_: " + typeof _);
        console.log("Backbone: " + typeof Backbone);
    }
);

Solution 2 - Javascript

The Error

I recently had a very similar issue with an angularJS project using requireJS.

I'm using Chrome canary build (Version 34.0.1801.0 canary) but also had a stable version installed (Version 32.0.1700.77) showing the exact same issue when loading the app with Developer console open:

Uncaught Error: Load timeout for modules

The developer console is key here since I didn't get the error when the console wasn't open. I tried resetting all chrome settings, uninstalling any plugin, ... nothing helped so far.

The Solution

The big pointer was a Google group discussion (see resources below) about the waitSeconds config option. Setting that to 0 solved my issue. I wouldn't check this in since this just sets the timeout to infinite. But as a fix during development this is just fine. Example config:

<script src="scripts/require.js"></script>
<script>
  require.config({
    baseUrl: "/another/path",
    paths: {
      "some": "some/v1.0"
    },
    waitSeconds: 0
  });
  require( ["some/module", "my/module", "a.js", "b.js"],
    function(someModule,    myModule) {
      //This function will be called when all the dependencies
      //listed above are loaded. Note that this function could
      //be called before the page is loaded.
      //This callback is optional.
    }
  );
</script>

Most common other causes for this error are:

  • errors in modules
  • wrong paths in configuration (check paths and baseUrl option)
  • double entry in config

More Resources

Troubleshooting page from requireJS: http://requirejs.org/docs/errors.html#timeout point 2, 3 and 4 can be of interest.

Similar SO question: https://stackoverflow.com/questions/20736547/ripple-uncaught-error-load-timeout-for-modules-app-http-requirejs-org-docs

A related Google groups discussion: https://groups.google.com/forum/#!topic/requirejs/70HQXxNylYg

Solution 3 - Javascript

In case others have this issue and still struggling with it (like I was), this problem can also arise from circular dependencies, e.g. A depends on B, and B depends on A.

The RequireJS docs don't mention that circular dependencies can cause the "Load timeout" error, but I've now observed it for two different circular dependencies.

Solution 4 - Javascript

Default value for waitSeconds = 7 (7 seconds)

If set to 0, timeout is completely disabled.

src: http://requirejs.org/docs/api.html

Solution 5 - Javascript

The reason for the issue is that Require.js runs into the timeout since the project might have dependencies to large libraries. The default timeout is 7 seconds. Increasing the value for this config option (called waitSeconds) solves it of course but it is not the right approach. Correct approach would be to improve the page loading time. One of the best technics to speed up a page loading is minification - the process of compressing the code. There are some good tools for minification like r.js or webpack.

Solution 6 - Javascript

I only get this error when running tests on Mobile Safari 6.0.0 (iOS 6.1.4). waitSeconds: 0 has given me a successful build for now. I'll update if my build fails on this again

Solution 7 - Javascript

TLDR: Requiring the same file twice with two valid different names, possibly two of the following:

  • absolute path: '/path/to/file.js'

  • relative path: './path/to/file.js'

  • as a module: 'path/to/file'

  • as a module on main paths config:

    paths: { 'my/module/file' : '/path/to/file' }

Recently had this same issue. I did change some require paths in bulk so I knew the issue was about that.

I could clearly see on both server side logs and network debugging tab the file being served in less than a second. It was not a real timeout issue.

I tried to use xrayrequire as suggested to find any circular dependency without success. I looked for requires of the conflicting file and found out I was requiring it twice with different names.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDevin DixonView Question on Stackoverflow
Solution 1 - JavascriptMike Barlow - BarDevView Answer on Stackoverflow
Solution 2 - JavascripthcplView Answer on Stackoverflow
Solution 3 - JavascriptAaronView Answer on Stackoverflow
Solution 4 - JavascriptEduschoView Answer on Stackoverflow
Solution 5 - JavascriptLyudmylaView Answer on Stackoverflow
Solution 6 - JavascriptAdam SpenceView Answer on Stackoverflow
Solution 7 - JavascriptNoman_1View Answer on Stackoverflow