2

次のようなファイル構造があります。

/js
 |-module/myModule.js
 |-test.js
/vendor/
/spec
 |-main.js
 |-js/app.js

spec/main.jsは私のエントリ ポイントであり、そこからモジュールをロードします/js, /vendor/spec

これらのモジュールは想定して構築されているため、invendorおよび in にあるモジュールをロードするのに問題はありません。 specbaseUrl = '/'

モジュールをロードするときに問題が発生します。/jsこれらのモジュールは、baseUrl = '/js'.

のスクリプトのコードを変更せずにこの問題を修正するにはどうすればよい'/js'ですか?

問題を説明するインライン コメントの例を次に示します。


仕様/main.js

(function () {
    'use strict';
    require.config({
        baseUrl: '../'
    });
});

define([
    'spec/js/app' // it works
], function (app) {
    'use strict';
    app.initialize();
});

仕様/js/app.js

(function(){
    'use strict';
    define([
        'js/module/myModule' // it works
    ], function () {
     // some code
    });
});

js/モジュール/myModule.js

(function(){
    'use strict';
    define([
        'test' // it does not works because
               // it assumes that baseUrl equals '/js' and not '/'
    ], function () {
     // some code
    });
});
4

1 に答える 1

1

まず第一に、コードをラップしている無名関数に () がすべてありません。

たとえば、このコードでは次のようになります。

(function () {
    'use strict';
    require.config({
        baseUrl: '../'
    });
}()); // <-- missing ()

基本的に、このコードは実行されていないため、何もしていません。コードを無名関数内にラップする場合 (グローバル スコープの汚染を避けるため、コードを簡単に最小化するためなど)、それを実行する必要があります。しかし、おそらくあなたがこの記事を書いたときのタイプミスです。

いくつかの解決策がありますが、問題を簡単に、または 100% 解決することはできないのではないかと思います (その解決策がないと言っているわけではありません。わからないというだけです)。それ)

まず、次のように require.config オブジェクトでパスを定義できます。

require.config({
    baseUrl: '../',
        paths : {
            test : 'js/test.js'
    }
});

これで、コードが機能します。すべてのファイルのパスにエントリを定義する必要があるため、最善の解決策ではないことは承知しており、より一般的な解決策を探していると思います。

path を使用すると、1 つのパッケージ (モジュールの 1 つのグループ) の依存関係に常にプレフィックスを設定できるため、コードをパッケージ内に整理し、そのモジュールへの依存関係にプレフィックスを追加できます。また、パッケージにメイン ファイルがある場合は、require.config へのパスをオンデマンドで追加して、そのモジュールの現在の場所へのパスにリンクする PREFFIX を追加できます。

私が考えることができる別の解決策は、js 内のモジュールで相対パスを使用することです。この問題が頻繁に発生する場合は、モジュールの依存関係を常に相対パスを使用して定義する必要があります。そう

define([
        'test'
    ], function () {
        ...
);

次のようになります。

define([
        '../test'
    ], function () {
        ...
);

しかし、あなたの問題の実際の解決策を考えることはできないので (js/ ファイルのコードを何も変更せずにこれを解決するには)、パッケージの依存関係で相対パスの使用を開始することをお勧めします。異なるプロジェクト間でモジュールのグループを再利用するために使用されます。そしてもちろん、特定の方法でファイルを整理します。

誰かがあなたの問題の本当の解決策を持っているかどうか見てみましょう.

于 2012-06-20T09:30:31.267 に答える