2012-09-24 14 views
18

私は本質的にちょっと便利なJSで、クライアント側でも使用できるノードモジュールを作成しました。 require.jsがcommon.jsコンポーネントをロードできることはわかっていますが、必ずしもモジュールクライアント側を使用するすべてのユーザーにrequireまたはcommon.jsなどが必要なことを強制する必要はありません。また、ファイルの末尾にあるmodule.exports = ...を削除するよう強制したくありません。どのように他の人がこの問題を解決するのですか? 2つのバージョン、または2つの "コンパイルされた"バージョンを作成するだけですか? module.exportsはどこでも使えますか?module.exportsクライアント側

if (typeof exports !== 'undefined') { 
    if (typeof module !== 'undefined' && module.exports) { 
    exports = module.exports = _; 
    } 
    exports._ = _; 
} else { 
    root['_'] = _; 
} 
+2

私が知っているこの主題に関する最善の解説はhttp://www.2ality.com/2011/11/module-gap.htmlです。著者は長所/短所と開発/展開モードについて議論します。 –

答えて

16

。 「名前空間」を想定すると、その後、ブラウザでのNode.jsでrequire('namespace').my === 'cool'またはNamespace.my === 'cool'を使用することができ、クライアント

(module ? {}).exports = @Namespace = 
    my: 'cool' 
    module: '!' 

ためwindow範囲で主張したいものです。

try { 
    module.exports = exports = MyModule; 
} catch (e) {} 

このファイルには、ブラウザとnode.js.の両方に含めることができます。これは、私は、これは単純見つける

(typeof module !== "undefined" && module !== null ? module : {}).exports = this.Namespace = { 
    my: 'cool', 
    module: '!' 
}; 
+0

ああええ、それはクールです! – Parris

+0

コードのこの部分をテストして、正常にエクスポートされたことを確認する方法が不思議です。 – Jun

4

これは私(のCoffeeScript)のために働いている:これはunderscore.jsが何をするかである

関連する問題