test.js
require('x')
複製**
x是node核心模組(如http,zlib等)則返回,否則繼續
根據module物件的paths屬性一直遞迴找node_modules
資料夾下是否存在該模組,直到根目錄,否則丟擲error('module_not_found')
x是路徑(如/path/to/file)
load_as_file:
.js
.json
.node
檔案(編譯好的二進位制node外掛程式)
load_as_dir:
x/package.json
中的main欄位作為模組入口檔案
index.js
index.json
index.node
module ,
parent: null,
loaded: false,
children:
[module
], paths:
['/users/wl/sites/node_modules',
'/users/wl/node_modules',
'/users/node_modules',
'/node_modules'
]}複製**
主要由以下兩點考慮
注:建議啟用'use strict'模式,防止定義全域性變數
(function(exports, require, module, __filename, __dirname) );
複製**
在乙個node上下文環境中,兩次require
同乙個檔案,通常
情況下返回完全相同的兩個物件引用。除非用高階函式返回工廠函式。
由於node包相互依賴,則較大可能會形成迴圈引用
,node利用其快取
機制避免無限迴圈。比如
index.js
const prefix = '主模組:'
const a = require('./a.js')
console.log(prefix, a) //
console.log(prefix, require.main === module)
console.log(module)
複製**
a.js
'use strict'
const prefix = 'a模組:'
module.exports =
const b = require('./b.js')
console.log(prefix, b) //
module.exports =
console.log(prefix, require.main === module)
複製**
b.js
const prefix = 'b模組:'
module.exports =
const a = require('./a.js')
console.log(prefix, a) //
console.log(prefix, require.main === module)
複製**
如上。當b.js引用a.js時,為避免無限迴圈,a.js未完成的副本
(我認為是require('./b.js')之前的所有**,但是在官方文件中未得到特別確切的表述)匯出的物件被b.js引用 Nodejs核心模組
1 全域性物件 在瀏覽器js中,通常window是全域性物件,而nodejs中的全域性物件是global,所有全域性變數都是global物件的屬性。在nodejs中能夠直接訪問到的物件通常都是global的屬性,如console process等 全域性物件與全域性變數 global最根本的作用是作...
nodejs 模組系統
模組系統分為原生系統跟檔案系統,他們的呼叫優先順序為 檔案系統快取區 原生系統 原生系統快取區 檔案系統 1.原生系統 http,path,fs 等 2.載入檔案系統時還可以指定自定義檔案 hello 或者 root node hello 路徑載入 3.mod 非原生系統的檔案系統 node.js ...
nodejs核心模組之http
http模組包含以下5個核心類和方法及屬性 核心類 2.http.createserver 該方法返回http.server類的例項,該例項繼承了eventemitter 類。eventemitter 類有乙個特殊的事件error,當連線失敗的時候會自動觸發該error事件,因此在建立http伺服器...