スクリプトをロードするためにrequireJSを使用しています。ドキュメントにこの詳細があります:
モジュール名に使用されるパスには、.js 拡張子を含めないでください。これは、パス マッピングがディレクトリ用である可能性があるためです。
私のアプリでは、実行時に動的に生成されるため、すべてのスクリプト ファイルを構成パスにマップします (私のスクリプトは次のように開始されますが、次のorder.js
ようになりますorder.min.b25a571965d02d9c54871b7636ca1c5e.js
(これは、キャッシュバスティングの目的で、ファイルの内容のハッシュです)。 .
場合によっては、require はこれらのパスの末尾に 2 つ目の .js 拡張子を追加します。サーバー側で動的パスを生成してから構成パスに入力しますが.js
、問題のあるファイルから拡張子を削除するには、追加の JavaScript コードを記述する必要があります。
requireJS のドキュメントを読んでも、ディレクトリにパス マッピングを使用する理由がよくわかりません。これは、ディレクトリ全体に相当するファイルを 1 回の呼び出しでロードできるということですか? 理解できません。
.js をファイル パスに追加するのを強制的に停止して、ハッキングする必要がないようにすることができるかどうか、誰かが知っていますか?
ありがとう。
更新: 要求に応じていくつかのコード サンプルを追加しました。
これは私の HTML ファイル内にあります (これは Scala プロジェクトであるため、これらの変数をファイルに直接書き込むことはできません.js
)。
foo.js.modules = {
order : '@Static("javascripts/order.min.js")',
reqwest : 'http://5.foo.appspot.com/js/libs/reqwest',
bean : 'http://4.foo.appspot.com/js/libs/bean.min',
detect : 'order!http://4.foo.appspot.com/js/detect/detect.js',
images : 'order!http://4.foo.appspot.com/js/detect/images.js',
basicTemplate : '@Static("javascripts/libs/basicTemplate.min.js")',
trailExpander : '@Static("javascripts/libs/trailExpander.min.js")',
fetchDiscussion : '@Static("javascripts/libs/fetchDiscussion.min.js")'
mostPopular : '@Static("javascripts/libs/mostPopular.min.js")'
};
次に、私の内部main.js
:
requirejs.config({
paths: foo.js.modules
});
require([foo.js.modules.detect, foo.js.modules.images, "bean"],
function(detect, images, bean) {
// do stuff
});
上記の例では、直接オブジェクト (他の人が を使用するように) ではなく、文字列「bean」(require パスを参照) を使用する必要がありfoo.js.modules.bar
ます.js
。
これが理にかなっていることを願っています。