0

TL;DR は質問の一番下にあります。私のがらくたをすべて読みたくない人のために。

私の現在の JavaScript モジュール化の方法は、単純に「csc」(私の会社の頭字語) のようなグローバル アンカーを作成し、その上にモジュールを追加することです。

したがって、次のようなグローバル構造になります。

csc.
    Utils 
    Map
       .Geolocation
    Storage.
            Cookie
            DB

これらの各ファイルは、次のディレクトリ構造に格納されます。

csc.js
csc.Utils.js
csc.Map.js
csc.Storage.js

これにより、コードベース全体を常にロードする必要がなくなります。

RequireJS の使用に移行しようとしていますが、そのライブラリで採用されている方法論は少し異なるようです。

名前空間構造を維持するために、すべてのモジュールの周囲にモジュールを定義できますが、それでもそれらをグローバルな「csc」参照に追加します。ただし、これは Require のコア原則に反しているようです。

ただし、それらをグローバルに維持しないと、次のように個別の変数がたくさんあるため、「csc.Map.Geolocation」などの適切な名前空間が失われます。

require(['csc', 'csc.Utils', 'csc.Map'], function (csc, utils, map) {
});

上記の恐ろしい説明が十分でない場合に備えて、質問を本質にまで落とします。

おそらくモジュール定義内で、これら3つの変数をこの質問の上部で定義された構造に戻す方法はありますか? それとも、私はこれをすべて間違っているのでしょうか? 代わりに、Require のやり方に従うべきでしょうか? 私は Require の方法論に従いたいと思っていますが、すべてのモジュールを連鎖可能にして名前空間化できる機能も気に入っています。

4

1 に答える 1

1

ドキュメントのパス階層の例に落胆しないでください。require は特定の規則を厳密に強制するものではないことに注意してください。独自の規則を自由に設計して従うことができます。

UtilsMap、およびStorageすべてがディレクトリになります。それらが実行する基本アクションはmodule.js、次のように、それぞれのディレクトリで名前を付ける必要があります。

core.js
Utils/
      module.js
Map/
    module.js
    geolocation.module.js
Storage/
        module.js
        cookie.module.js
        db.module.js

module.jsファイルには、その子が含まれ、返されます。Storage/module.js の例を次に示します。

require(["Storage/cookie", "Storage/db"], function (cookie, db) {
    var Storage = {};
    // do whatever you need with Storage
    Storage.cookie = cookie
    Storage.db = db

    return Storage
});

core.jsルートにあるファイルにも注意してください。このファイルはまったく同じように機能しますが、

require(["Utils/module", "Storage/module", "Map/module"], function (utils, storage, map) {
    var Core = {};
    // do whatever you need with Storage
    Core.Utils = utils
    Core.Storage = storage
    Core.Map = map

    return Core
});

ここで、これらのモジュール (基本的にすべてのファイル) へのアクセスが必要な場所で、core.js を必要とします。はい、これにより、開発中は常に関連するすべてのファイルが読み込まれますが、アプリをコンパイルすると、すべての変数が無名関数のスコープ内にあり、window オブジェクトを介して直接アクセスすることはできません。

繰り返しますが、適切と思われるようにこれを微調整してください。それは独自の規則です。

于 2013-01-31T23:19:08.243 に答える