web-dev-qa-db-ja.com

module.exportsクライアント側

基本的に、クライアント側でも使用できる便利なJSであるノードモジュールを作成しました。 require.jsがcommon.jsコンポーネントをロードできることは知っていますが、モジュールのクライアント側を使用するすべての人がrequireまたはcommon.jsなどを必要とすることを必ずしも義務付けたくはありません。また、ファイルの下部にあるmodule.exports = ...を強制的に削除したくありません。他の人はこの問題をどのように解決しますか? 2つのバージョンを作成するだけですか、それとも2つの「コンパイル済み」バージョンを作成するだけですか。 module.exportsはどこでも機能しますか?

23
Parris

これはunderscore.jsが行うことです:

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

私はこれがより簡単だと思います:

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

このファイルは、ブラウザーとnode.jsの両方に含めることができます。

8
frodeborli

これは私にとってはうまくいきました(CoffeeScript)。 「名前空間」がクライアントのwindowスコープで要求するものであると想定します

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

次に、Node.jsでrequire('namespace').my === 'cool'を使用するか、ブラウザーで_Namespace.my === 'cool'_を使用できます。これはJSに変換されます

_(typeof module !== "undefined" && module !== null ? module : {}).exports = this.Namespace = {
  my: 'cool',
  module: '!'
};
_
4
Casey Foster