模塊是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方法接受如下幾種參數的傳遞:
exports 和 module.exports 的使用
若是要對外暴露屬性或方法,就用 exports 就行;
要暴露對象(相似class,包含了不少屬性和方法),就用 module.exports。
不建議同時使用 exports 和 module.exports。
若是先使用 exports 對外暴露屬性或方法,再使用 module.exports 暴露對象,會使得 exports 上暴露的屬性或者方法失效。
緣由在於,exports 僅僅是 module.exports 的一個引用。