Nodejs的模塊系統以及require的機制

 轉自:https://www.cnblogs.com/blog-cxj2017522/p/7071840.htmlhtml

Nodejs 有一個簡單的模塊加載系統。在 Nodejs 中,文件和模塊是一一對應的(每一個文件被視爲一個獨立的模塊),這個文件多是 JavaScript 代碼,JSON 或編譯過的C/C++ 擴展,例如:node

複製代碼
/**
 *foo.js
 *將這個js文件導出爲模塊
 */
exports.hello = function() {
    console.log("hello Nodejs!");
}
複製代碼

 

複製代碼
/**
 *main.js
 *main.js和foo.js在同一目錄下
 *在控制檯中將會輸出:hello Nodejs!
 */
var foo = require("./foo.js");

foo.hello();
複製代碼

 

2、如何將模塊導出—— module.exports 與 exports 的區別json

  Nodejs 中的每個模塊都會自動建立一個 module 對象,同時 module 對象下有一個叫 exports 的屬性,能夠將某個類的實例賦值給 module.exports,從而導出這個類的實例。在模塊被執行前,Nodejs 會將 module.exports 的值賦於全局變量 exports ,以便 module.exports.f = ...  能夠更簡潔的寫成 exports.f = ...  。注意:就像全部變量同樣,若是從新給 exports 賦值,它就再也不綁定到 module.exports 了,也不會導出指定模塊post

例如:ui

複製代碼
/**
 *foo.js
 *導入方式:var foo = require("./foo.js");
 */
function Foo() {}
Foo.prototype.hello = function() {
    console.log("hello Nodejs!");
}

module.exports = new Foo();
複製代碼

 

複製代碼
/**
 *foo.js
 *導入方式:var Foo = require("./foo.js"); var foo = new Foo();
 */
function Foo() {}
Foo.prototype.hello = function() {
    console.log("hello Nodejs!");
}

module.exports = Foo;
複製代碼

 

複製代碼
/**
 *foo.js
 *導入方式:var foo = require("./foo.js");
 */
exports.hello = function() {
    console.log("hello Nodejs!");
}
複製代碼

 

3、require的機制spa

  假設Y是路徑,X是文件名或目錄名,當 Nodejs 遇到 require(Y+X) 時,按照下面的順序處理:prototype

  一、若是 X 是核心模塊(例如:require("http"))code

  a.返回該模塊htm

  b.再也不繼續執行對象

  二、若是Y是以「./」、「/」或「../」開頭

  a.把X當成文件,從指定路徑開始,依次查找下面文件:X、X.js、X.json、X.node,只要其中一個存在,就返回該文件,再也不繼續執行

  b.把X當成目錄,從指定路徑開始,依次查找下面文件:X/package.json(main字段)、X/index.js、X/index.json、X/index.node,只要其中一個存在,就返回該文件,再也不繼續執行

  3.若是 X 不是核心模塊,也沒有以「./」、「/」或「../」開頭,則Nodejs會從當前模塊的父目錄開始,嘗試從它的 /node_module 目錄里加載模塊,若是仍是沒有找到,則移動到再上一層父目錄,直到文件系統的根目錄

  4.拋出「not found」

相關文章
相關標籤/搜索