1

次のように、CommonJS、AMD、およびブラウザーのグローバル全体で使用できるモジュールを定義する UMD スタイルでモジュールを定義しています。

(function (root, factory) {
    if (typeof define === 'function' && define.amd) define(['exports'], factory);
    else if (typeof exports === 'object') factory(exports);
    else factory(root.GlobalObject = {});
})(this, function (exports) {
    // Module definition here
});

これは、エクスポートされたオブジェクトにプロパティをアタッチしたい場合に最適ですが、この定義から単一のコンストラクター関数を返すだけで、3 つのシステムすべてがこのモジュールをロードし、返された関数を直接使用できるようにしたい場合はどうでしょうか。オブジェクト リテラルを返し、リテラルのプロパティとしてコンストラクターにアクセスする必要がありますか?

4

2 に答える 2

1

以下は、AMD (RequireJS) とノードの両方で機能します。

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        define([ 'module' ], function (module) {
            module.exports = factory();
        });
    } else if (typeof module === 'object') {
        module.exports = factory();
    } else {
        root.GlobalFunction = factory();
    }
}(this, function () {
    'use strict';

    function MyFunction() {
    }

    return MyFunction;
}));
于 2015-01-18T07:24:59.577 に答える
0

リストの最初の項目の指定だけでは、それは不可能です。

モジュールのコンテキスト

  1. モジュールには、上記の定義に準拠する自由変数「require」があります [sic]。
  2. モジュールには、「exports」と呼ばれる自由変数があります。これは、モジュールが実行時に API を追加できるオブジェクトです。
    1. モジュールは、エクスポートの唯一の手段として「エクスポート」オブジェクトを使用する必要があります。
  3. モジュールには、オブジェクトである自由変数「モジュール」が必要です。
    1. 「モジュール」オブジェクトには、モジュールのトップレベルの「id」である「id」プロパティが必要です。「id」プロパティは、require(module.id) が module.id の元のエクスポート オブジェクトを返すようなものでなければなりません。(つまり、module.id を別のモジュールに渡すことができ、元のモジュールを返す必要があります)。可能であれば、このプロパティを読み取り専用にする必要があります。削除しないでください。
    2. 「モジュール」オブジェクトには、モジュールの作成元のリソースへの完全修飾 URI である「uri」文字列が含まれる場合があります。「uri」プロパティはサンドボックスに存在してはなりません。

つまりexports、オブジェクトです。メソッドをエクスポートできる唯一のオブジェクトでなければなりません。追加することしかできません。

于 2014-05-21T23:42:07.847 に答える