私はrequirejs2.xを使用しており、CDNからjQueryをロードし、ローカルファイルにバックアップを作成しています。shimconfigソリューションを使用してjQueryプラグインをロードしようとしています。これは高速接続とローカルブラウザで正常に機能するようですが、ワイヤレス接続または低速接続でテストしたところ、プラグインがjqueryを検索していて、まだロードされていない場合にランダムエラーが発生するようです。この問題に関連するドキュメントや他のサイトを調べましたが、セットアップは正常に見えます。
以下はサンプルです。
// main.js
requirejs.config({
baseUrl: "scripts",
paths: {
"jquery" : [
"//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min",
"libs/jquery/jquery-1.8.0.min"
],
"$plugins":"./libs/jquery",
"modules" : "./app/modules",
},
shim: {
"jquery.easing" : ["jquery"],
"jquery.urlutils": ["jquery"]
},
priority: ["jquery"]
});
// somemodule.js
define([
'modules/otherModule',
'jquery',
'$plugins/jquery.urlutils'
], function( OtherModule, $ ) {
// code...
});
ここで、「somemodule」がjQueryとotherModuleをロードしていることがわかります(正常に動作します)。一方、jqueryは、プラグインの前にロードされることがあります。直接パスを使用してプラグインをpathsオブジェクトに追加してみましたが、上記の「somemodule」で$pluginsパスを省略しました。これは毎回うまく設定されているようです。しかし、これはシムの目的を打ち負かしませんか?パスを設定して依存関係を設定する必要があるという事実は気に入らない。
どんな助けでもいただければ幸いです。それは私を狂わせています。:)
私は何かが足りないのですか?または、jqueryプラグインの前にshimキーの前に$ pluginsパスを付ける必要がありますか?
考えられる解決策
私は解決策を見つけました...私は信じています。クロスブラウザを確認するためにまだテスト中です。
shimのjqueryプラグイン(jquery.urlutils)のパスと、「somemodule」の依存関係リストの定義に注意してください。また、プラグインの実際の場所に移動するためのパスを使用していることにも注意してください。
また、「enforeDefine」を使用することになったわけではないことにも注意してください。使用すると、エラーが再度表示されるか、「definedoesnotexists」エラーが発生します。
requirejs.config({
baseUrl: "scripts",
paths: {
"jquery" : [
"//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min",
"libs/jquery/jquery-1.8.0.min"
],
"$plugins":"./libs/jquery",
"modules" : "./app/modules",
},
shim: {
"$plugins/jquery.easing" : ["jquery"],
"$plugins/jquery.urlutils": ["jquery"]
},
priority: ["jquery"]
});
// somemodule.js
define([
'modules/otherModule',
'jquery',
'$plugins/jquery.urlutils'
], function(OtherModule, $ ) {
// code...
});