Module 基礎模塊

模塊global

全局對象,所有腳本均可以訪問的基礎對象

對象

Buffer

二進制數據緩存對象,用於 io 讀寫的數據處理,參見 Buffer 對象。

1
Buffer global.Buffer;

console

控制台訪問對象

1
console global.console;

process

進程對象

1
process global.process;

靜態函數

run

運行一個腳本

1 2
static global.run(String fname, Array argv = []);

調用參數:

  • fname: String, 指定要運行的腳本路徑
  • argv: Array, 指定要運行的參數,此參數可在腳本內使用argv 獲取

require

加載一個模塊並返回模塊對象,更多信息參閱@ref module

1
static Value global.require(String id);

調用參數:

  • id: String, 指定要加載的模塊名稱

返回結果:

  • Value, 返回加載模塊的引出對象

require 可用於加載基礎模塊,文件模塊。

基礎模塊是沙箱創建時初始化的模塊,引用時只需傳遞相應的id,比如require("net")。

文件模塊是用戶自定義模塊,引用時需傳遞以./ 或../ 開頭的相對路徑。文件模塊支持.js, .jsc 和 .json 文件。

文件模塊也支持package.json 格式,當模塊為目錄結構時,require 會先查詢package.json 中的main,未發現則嘗試加載路徑下的index.js, index.jsc 或index.json。

若引用路徑不是./ 或../ 開頭,並且非基礎模塊,require 從當前模塊所在路徑下的node_modules 查找,並上級目錄遞歸。

基礎流程如下:

%0 start start is_native is internal module? start->is_native resolve path.resolve has_file module exists? resolve->has_file search recursive lookup node_modules from the current path search->has_file load load end end load->end is_native->end Yes is_mod is module? is_native->is_mod No is_mod->search Yes is_abs is absolute? is_mod->is_abs No is_abs->resolve No is_abs->has_file Yes has_file->load Yes has_ext module.js exists? has_file->has_ext No has_ext->load Yes has_package /package.json exists? has_ext->has_package No has_main main exists? has_package->has_main Yes has_index index.js exists? has_package->has_index No has_main->load Yes has_main->has_index No has_index->load Yes has_index->end No

setTimeout

在指定的時間後調用函數

1 2 3
static Timer global.setTimeout(Function callback, Number timeout = 1, ...args);

調用參數:

  • callback: Function, 指定回調函數
  • timeout: Number, 指定延時的時間,以毫秒為單位。超過2^31 的話,立即執行。
  • args: ..., 額外的參數,傳入到指定的callback 內,可選。

返回結果:

  • Timer, 返回定時器對象

clearTimeout

清除指定的定時器

1
static global.clearTimeout(Value t);

調用參數:

  • t: Value, 指定要清除的定時器

setInterval

每間隔指定的時間後調用函數

1 2 3
static Timer global.setInterval(Function callback, Number timeout, ...args);

調用參數:

  • callback: Function, 指定回調函數
  • timeout: Number, 指定間隔的時間,以毫秒為單位。超過2^31 的話,立即執行。
  • args: ..., 額外的參數,傳入到指定的callback 內,可選。

返回結果:

  • Timer, 返回定時器對象

clearInterval

清除指定的定時器

1
static global.clearInterval(Value t);

調用參數:

  • t: Value, 指定要清除的定時器

setHrInterval

每間隔指定的時間後調用函數,這是個高精度定時器,會主動打斷正在運行的JavaScript 腳本執行定時器

1 2 3
static Timer global.setHrInterval(Function callback, Number timeout, ...args);

調用參數:

  • callback: Function, 指定回調函數
  • timeout: Number, 指定間隔的時間,以毫秒為單位。超過2^31 的話,立即執行。
  • args: ..., 額外的參數,傳入到指定的callback 內,可選。

返回結果:

  • Timer, 返回定時器對象

由於setHrInterval 的定時器會中斷正在運行的代碼執行回調,因此不要在回調函數內修改可能影響其它模塊的數據,或者在回調中調用任何標記為async 的api 函數,否則將會產生不可預知的結果。例如:

1 2 3 4 5 6 7 8 9 10
var timers = require('timers'); var cnt = 0; timers.setHrInterval(() => { cnt++; }, 100); while (cnt < 10); console.error("===============================> done");

這段代碼中,第8 行的循環並不會因為cnt 的改變而結束,因為JavaScript 在優化代碼時會認定在這個循環過程中cnt 不會被改變。


clearHrInterval

清除指定的定時器

1
static global.clearHrInterval(Value t);

調用參數:

  • t: Value, 指定要清除的定時器

setImmediate

下一個空閒時間立即執行回調函數

1 2
static Timer global.setImmediate(Function callback, ...args);

調用參數:

  • callback: Function, 指定回調函數
  • args: ..., 額外的參數,傳入到指定的callback 內,可選。

返回結果:

  • Timer, 返回定時器對象

clearImmediate

清除指定的定時器

1
static global.clearImmediate(Value t);

調用參數:

  • t: Value, 指定要清除的定時器

GC

強制要求進行垃圾回收

1
static global.GC();

靜態屬性

Master

Worker, Worker 宿主對象,僅在 Worker 入口腳本有效

1
static readonly Worker global.Master;

global

Object, 全局對象

1
static readonly Object new global;

argv

Array, 獲取當前腳本的運行參數,啟動js 獲取進程啟動參數,run 執行的腳本獲取傳遞的參數

1
static readonly Array global.argv;

__filename

String, 當前腳本文件名

1
static readonly String global.__filename;

__dirname

String, 當前腳本所在目錄

1
static readonly String global.__dirname;