3

通常の方法であると理解している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 の非同期の性質を本当に楽しんでいますが、この問題はステージング/運用設定でのみ発生するため、特にイライラします。

ご意見やご提案をいただければ幸いです。

編集:質問を短くするために、おそらく余分な議論をいくつか削除しました。

4

1 に答える 1

2

私はこの問題を整理したと思います-GitHubの問題に投稿したmain.jsように、への呼び出しを含める必要があります。define

于 2012-07-31T22:14:42.467 に答える