1

私はjavascript libを持っています。基本的にこれはこれまでの構造です:

var Ns = (function(){
  var that = {};

  // add stuff to 'that'

  return that;
})();

//use Ns.foo() and Ns.bar()

node問題は、同じライブラリをandで利用できるようにしたかったということですnpm。これまでのところ、これは私が思いつくことができるものです:

this.Ns = (function(){ //same as previous snippet })()

//use Ns.foo() and Ns.bar()

問題は、これはブラウザでは機能しますが、ノードではこれを行う必要があることです:

var Ns = require('ns').Ns

問題:できるようになりたいのですvar Ns = require('ns')が、そのためにはエクスポートする必要がありthis.foothis.barブラウザのインクルージョンが壊れます。アイデア?

4

2 に答える 2

3
// create local scope.
(function () {

  var myModule = ...

  // check for node module loader
  if (typeof module !== "undefined" && typeof require !== "undefined") {
    module.exports = myModule;
  } else {
    window["name"] = myModule;
  }

})();
于 2011-11-07T02:14:56.510 に答える
0

スコープを作成するのがおそらく最善の方法ですが (名前の競合の問題が発生しないようにするため)、グローバル スコープを汚染することにより、これを行うより簡単な方法は次のようになります。

それ以外の

var x = require('x');

書きます

var x = (typeof require !== "undefined") ? require('x') : window;

同様に、エクスポートに追加する前に、そのオブジェクトが存在するかどうかを確認します。

if (typeof exports !== "undefined)
  exports.my_func = my_func;

ただし、これの結果として、ブラウザー バージョンではすべてがグローバル スコープにダンプされます。また、ブラウザ バージョンが必要なスクリプトをページにロードすることを前提としています。小規模で作業するのは簡単ですが、うまくスケーリングできないと思います。

于 2013-05-02T00:20:18.833 に答える