2013-01-11 10 views
53

私は私のコードを最適化するためにr.jsを使用しようとしていますが、私はこのエラーに実行し続ける:Require.jsエラー:モジュールのロードタイムアウト:バックボーン、jquerymobile

はの依存関係をトレース:

Error: Load timeout for modules: backbone,jquerymobile 
にinit

私が実行しているコマンドはこれです:

$ 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 

マイbuild.jsファイルは次のようになります。

({ 
    //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 
}) 

そして、私のinit.js次のようになります。私は、このビルドプロセスに間違った

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 
}); 

何をしているのですか?

+0

私は同じ問題を抱えていますが、あなたの場合でもクロムでのみ発生しますか? –

答えて

99

Require.jsには、waitSecondsというConfigオプションがあります。これは役に立ちます。

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); 
    } 
); 
+1

ありがとう!私は同じ問題を抱えていたが、実際にはタイムアウトの問題ではないと思った。これは、jQueryの依存性が宣言されている場合にのみエラーが発生するため、jQueryのサイズまたは複雑さに起因します。 'waitSeconds'を何か大きいものに変更すると、ビルドが正常に完了しました。 –

+1

これを確認できます。我々は、大きなライブラリへのいくつかの依存関係を持つより大きなプロジェクトを持っています。 requireJS 2.0.6ではうまくいきました。しかし、requireJS 2.1.4はタイムアウトに入ります。 'waitSeconds'の値が大きいほどそれが解決されました。 –

+0

人々がパラメータをすばやく認識できるように、プルリクエストを開いてrequire.jsのbuild.jsの例を更新しました。 https://github.com/jrburke/r.js/pull/362 –

37

エラー

私は最近requireJSを使用してangularJSプロジェクトに非常によく似た問題を持っていた:

RequireJS waitSeconds

はここwaitSecondsが使用されている例です。

私はクロームカナリアビルド(Version 34.0.1801.0 canary)を使用しても安定したバージョンがインストール(Version 32.0.1700.77Developer consoleオープンでアプリをロードするときとまったく同じ問題を示していたんだ:デベロッパーコンソールがキーである

Uncaught Error: Load timeout for modules 

をここではがコンソールが開いていないときにエラーが発生しなかったので、ここに。私はすべてのクロム設定をリセットして、プラグインをアンインストールしてみましたが、これまで何も助けてくれませんでした。

ソリューション

大きなポインタがwaitSeconds設定オプションについて(以下のリソースを参照してください)、Googleのグループディスカッションでした。 0に設定すると私の問題は解決しました。これは、タイムアウトを無限に設定するだけなので、これをチェックしません。しかし、開発中の修正として、これは問題ありません。 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> 

このエラーの最も一般的な他の原因は次のとおりです。モジュール内

  • エラー構成で
  • 間違ったパス(pathsbaseUrlオプションをチェック)
  • configにダブルエントリー

その他のリソース

トラブルシューティングのページrequireJS:http://requirejs.org/docs/errors.html#timeoutポイント2,3,4が該当します。

同様のSOの質問:

Ripple - Uncaught Error: Load timeout for modules: app http://requirejs.org/docs/errors.html#timeout関連するGoogleグループディスカッション:waitSeconds = 7(7秒)を0に設定した場合

ためhttps://groups.google.com/forum/#!topic/requirejs/70HQXxNylYg

+0

タイムアウトを無限に設定すると、正確なタイムアウト上限を設定できなくなります。ありがとうございました – jsbisht

16

は、この問題を持っている(私がしたように)まだそれに苦しんで、この問題はまた、例えば、循環依存から生じ得ますAはBに依存し、BはAに依存する

RequireJS docs循環依存が「ロードタイムアウト」エラーを引き起こす可能性はありませんが、ここでは2つの異なる循環依存性を観察しました。

+2

どのようにして循環問題を特定しましたか?あなたはそれぞれの定義されたモジュールを通過しなければなりませんか? –

+0

いくつかのモジュールを追加して変更したときに私の問題が浮かび上がったので、これらの変更を追跡し、依存関係を追加して循環依存ループを作成した後、それらを削除することができました。 – Aaron

+1

[xrayquire](https:// github。モジュールAをロードするときに観測される – Druska

0

モバイルSafari 6.0.0(iOS 6.1.4)でテストを実行している場合にのみ、このエラーが発生します。 waitSeconds: 0は私に今すぐ成功したビルドを与えてくれました。これでビルドが失敗した場合に更新します

+0

thats 2行に2つの依存関係があるかどうかを確認することができます(requirejsによるツール)。 –

1

Require.jsは、プロジェクトが大きなライブラリに依存する可能性があるため、タイムアウトになります。デフォルトのタイムアウトは7秒です。この設定オプション(waitSecondsと呼ばれる)の値を増やすことはもちろんそれを解決しますが、正しいアプローチではありません。 正しいアプローチはページの読み込み時間を改善することです。ページの読み込み速度を上げるための最高のテクニックの1つはミニ化 - コードを圧縮するプロセスです。 r.jswebpackのような小型化のための良いツールがいくつかあります。

関連する問題