53

スクリプトをロードするために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

これが理にかなっていることを願っています。

4

3 に答える 3

116

noextに依存関係を追加したくない場合は、次のように、パスにダミーのクエリ文字列を追加して、.js拡張子が追加されないようにすることもできます。

require.config({
    paths: {
        'signalr-hubs': '/signalr/hubs?noext'
    }
});

これは、noextプラグインが行うことです。

于 2013-03-13T17:55:20.023 に答える
14

requirejsのnoextプラグイン

「.js」拡張子を追加せずにスクリプトをロードします。動的スクリプトに役立ちます。

ドキュメンテーション

examplesフォルダを確認してください。おそらく必要なすべての情報は、コメント内またはサンプルコード自体にあります。

基本的な使い方

プラグインをbaseUrlフォルダー(通常はmain.jsファイルと同じフォルダー)内に配置するか、プラグインの場所のエイリアスを作成します。

require.config({
    paths : {
        //create alias to plugins (not needed if plugins are on the baseUrl)
        async: 'lib/require/async',
        font: 'lib/require/font',
        goog: 'lib/require/goog',
        image: 'lib/require/image',
        json: 'lib/require/json',
        noext: 'lib/require/noext',
        mdown: 'lib/require/mdown',
        propertyParser : 'lib/require/propertyParser',
        markdownConverter : 'lib/Markdown.Converter'
    }
});

//use plugins as if they were at baseUrl
define([
        'image!awsum.jpg',
        'json!data/foo.json',
        'noext!js/bar.php',
        'mdown!data/lorem_ipsum.md',
        'async!http://maps.google.com/maps/api/js?sensor=false',
        'goog!visualization,1,packages:[corechart,geochart]',
        'goog!search,1',
        'font!google,families:[Tangerine,Cantarell]'
    ], function(awsum, foo, bar, loremIpsum){
        //all dependencies are loaded (including gmaps and other google apis)
    }
);
于 2012-06-28T19:46:10.883 に答える