通常の方法であると理解しているCoffeeScriptでRequireJSをビルドして実行すると、コードが期待どおりの順序で実行されないという問題があるようです。
<script src="/_s/lib/require-jquery.js"></script>
<script>
require.config({
paths: {
"main": "/_s/all.min", // <--- the 'optimized' result of `$ r.js build.js`
}
});
require(["main"], function () {
// this executes without any regard to whether 'main' is loaded.
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// also:
// require('cs!csmain') throws an exception because "cs!csmain" has not been
// loaded for context: '_'.
});
require(["main"], ...
main とそのすべての依存関係がロードされた後に、渡された関数が実行されることが期待されます。これは、ドキュメントに記載されているためです。
しかし、そうではありません。私のローカル開発システムでは、この問題自体は発生しません。これは何らかの競合状態であり、展開/ステージング後にのみ発生するため、二重の問題になっているためだと思います。
私はこのような簡単なものを持っていmain.js
ます:
var _paths;
_paths = {
...
underscore: '../lib/lodash'
};
require.config({
baseUrl: '/_s/mycode/', // main.js lives here
paths: _paths,
shim: {
...
'timeago': ['jquery']
},
waitSeconds: 60
});
require(['cs!csmain']); // has all the dependencies
次の行に沿って引数build.js
として呼び出されます。r.js
({
baseUrl: 'mycode',
optimize: 'none',
out: 'all.min.js',
stubModules: ['cs', 'coffee-script'],
paths: {
...
underscore: '../lib/lodash'
},
name: 'main',
shim: {
...
}
})
ここで何が起こっているのか誰にも分かりませんか?コードを適切なモジュールに分割する機能と組み合わされた RequireJS の非同期の性質を本当に楽しんでいますが、この問題はステージング/運用設定でのみ発生するため、特にイライラします。
ご意見やご提案をいただければ幸いです。
編集:質問を短くするために、おそらく余分な議論をいくつか削除しました。