nodejs中的模組的理解

2021-09-24 06:41:41 字數 1944 閱讀 5135

nodejs所謂的模組就是乙個檔案,或者是匿名函式。(commonjs)

require

exports

module.exports。

複製**

364行列:

module.prototype.require = function(path) ;

複製**

module._load = function(request, parent, ismain) 

var filename = module._resolvefilename(request, parent);

複製**

# module._compile:

module.prototype._compile = function(content, filename) ;

複製**

require 乙個檔案的時候,會對其進行進行乙個匿名函式的包裝。

(function (exports, require, module, __filename, __dirname) );

複製**

1、先從快取中讀取,如果沒有則繼續往下

2、判斷需要模組路徑是否以/結尾,如果不是,則要判斷

a. 檢查是否是乙個檔案,如果是,則轉換為真實路徑

b. 否則如果是乙個目錄,則呼叫trypackage方法讀取該目錄下的package.json檔案,把裡面的main屬性設定為filename

c. 如果沒有讀到路徑上的檔案,則通過tryextensions嘗試在該路徑後依次加上.js,.json和.node字尾,判斷是否存在,若存在則返回加上字尾後的路徑

3、如果依然不存在,則同樣呼叫trypackage方法讀取該目錄下的package.json檔案,把裡面的main屬性設定為filename

4、如果依然不存在,則嘗試在該路徑後依次加上index.js,index.json和index.node,判斷是否存在,若存在則返回拼接後的路徑。

5、若解析成功,則把解析得到的檔名cache起來,下次require就不用再次解析了,否則若解析失敗,則返回false

複製**

function require(/* ... */)  };

((module, exports) =>

exports = somefunc;

module.exports = somefunc;

})(module, module.exports);

return module.exports;

}複製**

exports = module.exports,所以說,一開始這兩個東西指向同乙個物件例項

exports.x = function

()

module.exports.x();

複製**

# exports其實是module的屬性,require則是module原型的方法。exports.xx=xx,其實跟module.exports.xx=xx其實是一樣的,不過如果直接為export賦值,則不能寫成exports=xx,而應該寫成module.exports=xx,因為exports在這裡只是乙個引用。

# 從上面也可以看到,每一次require,都會把new乙個module,並且把這個module新增到當前模組的children中,並且返回新建的module物件的exports。

複製**

nodejs中的模組

nodejs中的模組管理遵循commonjs規範。使用module.exports 可簡寫為exports 匯出模組,使用require來引入模組。例 mymodule.js var myfunction function name module.exports myfunction 也可也成exp...

理解nodejs的module模組兒

在 node.js 模組系統中,每個檔案都視為獨立的模組,node在執行某個模組兒時會生成乙個module物件 module paths users leinov github node api module node modules users leinov github node api nod...

理解nodejs的module模組兒

在 node.js 模組系統中,每個檔案都視為獨立的模組,node在執行某個模組兒時會生成乙個module物件 module paths users leinov github node api module node modules users leinov github node api nod...