Node.js模塊系統

模塊是Node.js 應用程序的基本組成部分,文件和模塊是一一對應的。node

一個 Node.js 文件就是一個模塊,這個文件多是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。緩存

 

接下來咱們來嘗試建立一個模塊服務器

Node.js 提供了 exports 和 require 兩個對象,其中 exports 是模塊公開的接口,require 用於從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。ui

首先建立main.jsthis

//引入了當前目錄下的 cyy.js 文件(./ 爲當前目錄,node.js 默認後綴爲 js)
var cyy=require("./cyy");
cyy.sing();

接下來建立cyy.jsspa

exports.sing=function(){
    console.log("cyy is singing now~");
}

打印結果:3d

 

 

把一個對象封裝到模塊中code

那麼把cyy.js修改成:對象

function cyy(){
    var name;
    this.sing=function(song){
      console.log("cyy is sing "+song);
    }
    this.setName=function(name){
        this.name=name;
    }
    this.getName=function(){
        console.log(this.name);
    }
}
module.exports=cyy;

把main.js修改成:blog

//引入了當前目錄下的 cyy.js 文件(./ 爲當前目錄,node.js 默認後綴爲 js)
var cyy=require("./cyy");
cyy=new cyy();
cyy.sing("hhh~");
cyy.setName("new cyy");
cyy.getName();

打印結果:

 

 在外部引用該模塊時,其接口對象就是要輸出的cyy對象自己,而不是原先的 exports。

 

服務器的模塊

 模塊內部加載優先級:

一、從文件模塊的緩存中加載

二、從原生模塊加載

三、從文件中加載

 

require方法接受如下幾種參數的傳遞:

  • http、fs、path等,原生模塊。
  • ./mod或../mod,相對路徑的文件模塊。
  • /pathtomodule/mod,絕對路徑的文件模塊。
  • mod,非原生模塊的文件模塊。

 

exports 和 module.exports 的使用
若是要對外暴露屬性或方法,就用 exports 就行;
要暴露對象(相似class,包含了不少屬性和方法),就用 module.exports。

 

不建議同時使用 exports 和 module.exports。

若是先使用 exports 對外暴露屬性或方法,再使用 module.exports 暴露對象,會使得 exports 上暴露的屬性或者方法失效。

緣由在於,exports 僅僅是 module.exports 的一個引用。

相關文章
相關標籤/搜索