exportとmodule.exportの違い

3014 ワード

ブラウザ側のjsでは、各モジュールの変数衝突などの問題を解決するために、jsのクローズドによって左右のモジュールに関連するコードを匿名関数に包装します.Nodejsモジュールはかなり自由です.開発者はrequire、exports、moduleなどいくつかの変数に注目するだけで十分です.モジュールの可読性を維持するために、異なる機能のコードブロックを独立したモジュールとして作成し、モジュールの結合を減らすことをオススメします.
nodeのjsモジュールで直接exportsとmoduleの二つの「グローバル」変数を呼び出すことができますが、exportsはmodule.exportsの参照です.
//plus.js
function plus(a,b){
  return a+b;
}
//       plus     exports          
exports.plus = plus;

// main.js
var Plus = require('plus');
console.log(Plus.plus(1,2)); //     Plus   require       ,       plus   。
nodeのコンパイルの過程で、jsモジュールは以下の形式にカプセル化されます.
// require    Node.js         Module._load      
// __finename   __dirname   Node.js                      
(function(exports,require,module,__filename,__dirname){
  function plus(a,b){
    return a+b;
  }
  exports.plus = plus;
})
モジュールではなく関数を直接モジュールにエクスポートするための方法が必要です.
module.export=plus;
// plus.js
function plus(a,b){
  return a+b ;
}
module.exports = plus;
// main.js
var plus = require('plus');
console.log(plus(1,2));
exports=module.export={}
  • exportはmodule.exportsの一つの引用
  • である.
  • module.exportの初期値は一つの空のオブジェクト{}であり、exportの初期値も{}
  • である.
  • requireモジュールを参照した後、戻ってくるのはmodule.exportではなくexportsです!!!
  • exports.xxxは、導出対象に属性を掛けることに相当し、この属性は呼び出しモジュールに直接
  • を見ることができる.
  • export=exportオブジェクトへの再割当に相当し、呼び出しモジュールはexportオブジェクトとその属性
  • にアクセスできない.
  • このモジュールがクラスの場合、直接的にmodule.exportに値を割り当てるべきであり、このように調整者はクラスのコンストラクタであり、直接的にnewのインスタンスを作ることができる.
  • 例一:
    var name = 'rainbow';
    exports.name = name;
    exports.sayName = function(){
      console.log(name);
    }
    //   exports        module.exports             ,   :
    var name = 'rainbow';
    module.exports.name = name;
    module.exports.sayName = function(){
      console.log(name);
    }
    
    例二:
    exports = module.exports = somethings
    //    
    module.exports = somethings
    exports = module.exports 
    // module.exports = somethings    mudole.exports      ,   module.exports   exports      ,mudole.exports         , exports           ,    module.exports   exports                  "  ",      exports = module.exports.
    
    例三:
    exports = function(){};
    //         exports   ,      module.exports    ,        。
    
    例四:
    module.exports.something = function(){};
    exports.something = function(){};
    //           
    
    例5:
    // index.js
    var something = require('./requireMe');
    something();
    // requireMe.js
    exports.something = function(){
      console.log('am a function');
    }
    //        ,   require     module.exports    object,      
    
    //     
    // requireMe.js
    module.exports = function(){
       console.log('am a function');
    }
    //           ,     ,      module.exports     function,      。
    //      
    // index.js
    var something = require('./requireMe');
    something.something();
    //       require        object,    something    ,          。
    
    other:
    referenceは参照という意味で、二つの変数が同じ値を参照することで、同じメモリアドレスを指します.