1

私のアプリは、しばらくの間 Requirejs を使用してローカルで問題なく動作していましたが、リモート サーバーに配置すると、Requirejs 関連の問題が再び発生するようになりました。

実際の jquery といくつかの jQuery プラグイン (jquery.cookie など) をロードする jQuery ラッパー スクリプトがあります。

## boot.js

// Loaded via <script data-main="/boot.js" src="/vendor/requirejs/require.js"></script>
require({
  baseUrl: '/vendor/requirejs/',
  waitSeconds: 5,
  paths: {
    jquery: '/vendor/jquery/dist/jquery',
    jQuery: '/assets/javascripts/jquery-wrapper',
  }
}, [
  'jQuery'
], function($) {
    ...
  });
});

## /assets/javascripts/jquery-wrapper.js

define([
  'order!jquery',
  'order!/vendor/jquery-cookie/jquery.cookie.js'
], function($) {
  // In here I also define some on my own functions on $

  return $;
});

問題は、リモート サーバー上のアプリにアクセスするときに、jquery.cookie スクリプトが評価される時点で「jQuery」が定義されていないことです。これは、jQuery が読み込まれる前に実行されていることを意味します。

Uncaught ReferenceError: jQuery is not defined jquery.cookie.js:47
    (anonymous function) jquery.cookie.js:47

私は注文しました!プレフィックスはそのようなことが起こらないようにする必要がありますか?

繰り返しますが、これはローカルで正常に機能します。私が問題に遭遇するのは、リモートサーバーからサービスを提供するときだけです。

関連する場合、ローカルでシンサーバーを使用しています。リモートでもThinを使用していますが、Nginxの背後にありますが、Nginxはすべてを完全にThinにプロキシしています。

5 秒のタイムアウト内にファイルが見つからないという兆候はありません。エラーはすぐにコンソールに表示されます。

どこが間違っているのか誰か教えてもらえますか?

ありがとう

4

1 に答える 1

1

order プラグインを使用して JQuery をロードする方法に問題はありませんが、リモートではなくローカルで機能する場合は、サーバーから返されたファイルの HTTP ヘッダーをチェックして、ブラウザーのキャッシュをサポートしているかどうかを確認できます ( Cache-Control、Pragma、Expires、...)。注文プラグインは、javascript ファイルがブラウザによってキャッシュ可能な場合にのみ機能するためです。

そうでない場合は、RequireJS 構成の優先順位を使用して JQuery をロードし、他のプラグインの前に JQuery をロードするか、または必要に応じて定義関数でプランジをラップすることもできます。

define(['JQuery'], function ($) {
    //Paste plugin code here.
});
于 2012-05-21T14:12:23.590 に答える