概述nodejs模組系統核心原理

2021-09-11 14:02:53 字數 1938 閱讀 9760

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.jsindex.jsonindex.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伺服器...