Module 基础模块

模块 global

全局对象,所有脚本均可以访问的基础对象

对象

Buffer

二进制数据缓存对象,用于 io 读写的数据处理,参见 Buffer 对象。

1
Buffer global.Buffer;

Int64

64位整数对象,参见 Int64 对象。

1
Int64 global.Int64;

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 起始 is_native 内置模块? start->is_native resolve path.resolve has_file 原名存在? resolve->has_file search 从当前路径 向上递归查找 node_modules search->has_file load 加载 end 返回 load->end is_native->end is_mod 模块? is_native->is_mod is_mod->search is_abs 绝对路径? is_mod->is_abs is_abs->resolve is_abs->has_file has_file->load has_ext 增加 .js 存在? has_file->has_ext has_ext->load has_package /package.json 存在? has_ext->has_package has_main main 存在? has_package->has_main has_index index.js 存在? has_package->has_index has_main->load has_main->has_index has_index->load has_index->end

setTimeout

在指定的时间后调用函数

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

调用参数:

  • callback: Function, 指定回调函数
  • timeout: Number, 指定延时的时间,以毫秒为单位。超过 2^31 的话,立即执行。
  • args: ..., 额外的参数,传入到指定的 callback 内,可选。

返回结果:

  • Timer, 返回定时器对象

clearTimeout

清除指定的定时器

1
static global.clearTimeout(Timer t);

调用参数:

  • t: Timer, 指定要清除的定时器

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(Timer t);

调用参数:

  • t: Timer, 指定要清除的定时器

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(Timer t);

调用参数:

  • t: Timer, 指定要清除的定时器

setImmediate

下一个空闲时间立即执行回调函数

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

调用参数:

  • callback: Function, 指定回调函数
  • args: ..., 额外的参数,传入到指定的 callback 内,可选。

返回结果:

  • Timer, 返回定时器对象

clearImmediate

清除指定的定时器

1
static global.clearImmediate(Timer t);

调用参数:

  • t: Timer, 指定要清除的定时器

GC

强制要求进行垃圾回收

1
static global.GC();

repl

进入交互模式,可以交互执行内部命令和代码,仅在启动 js 可以引用

1
static global.repl(Array cmds = []);

调用参数:

  • cmds: Array, 补充命令

参数 cmd 格式如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[{ cmd: ".test", help: "this is a test", exec: function(argv) { console.log(argv); } }, { cmd: ".test1", help: "this is an other test", exec: function(argv) { console.log(argv); } } ]

进入交互模式,可以交互执行内部命令和代码,仅在启动 js 可以引用

1 2
static global.repl(Stream out, Array cmds = []);

调用参数:

  • out: Stream, 输入输出流对象,通常为网络连接
  • cmds: Array, 补充命令

同一时刻只允许一个 Stream repl,新建一个 Stream repl 时,前一个 repl 将被关闭。

参数 cmd 格式如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[{ cmd: ".test", help: "this is a test", exec: function(argv) { console.log(argv); } }, { cmd: ".test1", help: "this is an other test", exec: function(argv) { console.log(argv); } } ]

静态属性

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;