Process
提供有关当前Node.js进程的信息并对其进行控制
const process = require('node:process');进程事件
该 process 对象是 EventEmitter de实例
beforeExit
当 Node.js 清空其事件循环并且没有要安排的其他工作时,将发出 'beforeExit' 该事件。通常,当没有计划工作时,Node.js进程将退出,但在 'beforeExit' 事件中注册的侦听器可以进行异步调用,从而导致Node.js进程继续。
调用侦听器回调函数时,将传递 process.exitCode 的值作为唯一参数
对于导致显式终止的情况(例如调用 process.exit() 或未捕获的异常),不会发出该 'beforeExit' 事件。
除非打算安排额外的工作,否则不应将其 'beforeExit' 用作 'exit' 事件的替代方法。
const process = require('node:process')
process.on('beforeExit', (code) => {
console.log('进程 beforeExit 事件 code 为:', code)
})
process.on('exit', (code) => {
console.log('进程 exit 事件 code 为:', code)
})
console.log('这条消息最先显示');
/**
* 打印:
* 这条消息最先显示
* 进程 beforeExit 事件 code 为: 0
* 进程 exit 事件 code 为: 0
*/exit
当Node.js进程由于以下任一原因即将退出时,将发出该 'exit' 事件:
- 显式调用 process.exit() 的方法;
- Node.js事件循环不再有任何其他工作要执行。 此时无法阻止事件循环退出,一旦所有
'exit'侦听器都运行完毕,Node.js进程将终止 侦听器回调函数使用process.exitCode属性指定的退出代码或传递给方法的exitCodeprocess.exit()参数进行调用
const process = require('node:process');
process.on('exit', (code) => {
console.log(`即将退出, code: ${code}`);
});侦听器函数只能执行同步操作。调用 'exit' 事件侦听器后,Node.js进程将立即退出,从而导致放弃仍在事件循环中排队的任何其他工作。例如,在以下示例中,永远不会执行:
const process = require('node:process');
process.on('exit', (code) => {
setTimeout(() => {
console.log('This will not run');
}, 0);
});warning
每当Node.js发出进程警告时,就会发出该 'warning' 事件
wanning 事件有以下属性:
name: 警告的名称。默认值: 'Warning'message系统提供的警告说明。stack对代码中发出警告的位置的堆栈跟踪
const process = require('node:process')
process.on('warning', (warning) => {
console.warn(warning.message); // Print the warning message
console.warn(warning.name); // Print the warning name
console.warn(warning.stack); // Print the stack trace
});默认情况下,Node.js 会将进程警告打印到 stderr 。 --no-warnings 命令行选项可用于禁止显示默认控制台输出,但 process 该 'warning' 事件仍将由对象发出。
worker
该 'worker' 事件在创建新线程后发出
Signal events(信号事件)
当 Node.js 进程收到信号时,将发出信号事件。信号在线程上 Worker 不可用。
信号处理程序将接收信号的名称( 'SIGINT' 、 'SIGTERM' 等)作为第一个参数。
每个事件的名称将是信号的大写通用名称(例如 'SIGINT' SIGINT 信号)
const process = require('node:process')
process.stdin.resume()
process.on('SIGINT', () => {
console.log('收到 SIGINT。按 Control-D 退出');
})
process.on('SIGTERM', (signal) => {
console.log('收到', signal);
})'SIGUSR1'由Node.js保留以启动调试器。可以安装侦听器,但这样做可能会干扰调试器'SIGTERM'并在'SIGINT'非 Windows 平台上具有默认处理程序,这些处理程序在使用代码128 + signal number退出之前重置终端模式。如果其中一个信号安装了侦听器,则其默认行为将被删除(Node.js将不再退出)'SIGPIPE'默认情况下被忽略。它可以安装侦听器'SIGHUP'在控制台窗口关闭时在 Windows 上生成,在各种类似条件下在其他平台上生成,它可以安装侦听器,但大约 10 秒后,Windows 将无条件终止Node.js侦听器。在非 Windows 平台上,默认SIGHUP行为是终止Node.js,但一旦安装了侦听器,其默认行为将被删除。'SIGTERM'在 Windows 上不受支持,可以监听'SIGINT'所有平台都支持 From the Terminal,通常可以使用Ctrl + C生成(尽管这可能是可配置的)。当启用终端原始模式并使用Ctrl + C时,不会生成它'SIGBREAK'在 Windows 上按下Break + Ctrl时会传递此信息。在非Windows平台上,可以监听它,但无法发送或生成它。'SIGWINCH'在调整控制台大小时交付。在 Windows 上,这只会在移动光标时写入控制台时发生,或者在原始模式下使用可读 tty 时发生。SIGKILL'无法安装侦听器,它将无条件终止所有平台上的Node.js'SIGSTOP'无法安装侦听器。'SIGBUS','SIGFPE','SIGSEGV', and'SIGILL'当不使用kill(2)人为引发时,本质上会使进程处于调用 JS 侦听器不安全的状态。这样做可能会导致进程停止响应。0可以发送去测试一个进程的存在,如果进程存在,它就没有效果,但如果进程不存在,就会抛出错误。
Windows 不支持信号,因此没有与信号终止等效的功能,但 Node.js 提供了一些 process.kill(), and subprocess.kill() 模拟
- 发送
SIGINT、SIGTERM和SIGKILL将导致目标进程无条件终止,之后,子进程将报告该进程已通过信号终止。 - 发送信号
0可以用作独立于平台的方式来测试进程的存在。
process.abort()
该 process.abort() 方法使Node.js进程立即退出并生成核心文件
此功能在线程中 Worker 不可用。
process.allowedNodeEnvironmentFlags
process.allowedNodeEnvironmentFlags 属性是 NODE_OPTIONS 环境变量中允许的特殊、只读标志集
process.allowedNodeEnvironmentFlags 扩展了 Set,但重写了 Set.prototype.has 以识别几种不同的可能的标志表示形式。 process.allowedNodeEnvironmentFlags.has() 在以下情况下将返回 true:
- 标志可以省略前导单破折号 (
-) 或双破折号 (--);例如,inspect-brk代表--inspect-brk,或r代表-r - 传递到 V8 的标志(如
--v8-options中列出)可以替换一个或多个非前导破折号作为下划线,反之亦然;例如,--perf_basic_prof、--perf-basic-prof、--perf_basic-prof等 - 标志可以包含一个或多个等于 (
=) 字符;包括第一个等号之后和包括第一个等号在内的所有字符都将被忽略;例如,--stack-trace-limit=100 NODE_OPTIONS中必须允许使用标志
process.allowedNodeEnvironmentFlags 的 add()、clear() 和 delete() 方法不执行任何操作,并且会默默失败。
如果 Node.js 是在没有 NODE_OPTIONS 支持的情况下编译的(如 process.config 中所示),则 process.allowedNodeEnvironmentFlags 将包含允许的内容
process.arch
process.arch 属性返回当前 Node.js 进程的 CPU 架构, 如 'arm' 's390' 's390x' 'mips' 'mipsel' 'ppc' 'ppc64' 'riscv64' 'ia32' 'loong64' 'arm64' 'x64'
process.argv
该 process.argv 属性返回一个数组,其中包含启动Node.js进程时传递的命令行参数。
- 第一个元素将是
process.execPathnode 程序的完整路径 - 第二个元素是正在执行的 JavaScript 文件的路径,其余元素将是任何其他命令行参数。
const { argv } = require('node:process');
// print process.argv
argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
});启动Node.js流程:
node process-args.js one two=three four将生成输出:
0: C:\Program Files\nodejs\node.exe
1: C:\Users\keying\Desktop\app-docs\docs\server\nodejs\demo.js
2: one
3: two=three
4: fourprocess.channel
判断 Node.js进程是使用 IPC 通道生成的,如果不存在 IPC 通道,则此属性为 undefined
process.chdir(directory)
process.chdir() 方法更改 Node.js 进程的当前工作目录,如果失败(例如,如果指定的目录不存在),则抛出异常
const { chdir, cwd } = require('node:process')
console.log('起始目录', cwd())
try {
chdir('/tmp');
console.log(`新目录: ${cwd()}`);
} catch (err) {
console.error(`chdir: ${err}`);
}process.config
该 process.config 属性返回一个冻结 Object ,其中包含用于编译当前Node.js可执行文件的配置选项的 JavaScript 表示形式。这与运行 ./configure 脚本时生成 config.gypi 的文件相同。
process.connected
如果Node.js进程是使用 IPC 通道生成的, 则只要 IPC 通道已连接,该 process.connected 属性就会返回 true ,并在调用后 process.disconnect() 返回 false
一旦 process.connected , false 就不能再使用 process.send() 通过 IPC 通道发送消息。
process.cpuUsage([previousValue])
previousValue 调用 process.cpuUsage() 的上一个返回值
该 process.cpuUsage() 方法返回当前进程的用户和系统 CPU 时间使用情况,该对象具有属性 user 和 system ,其值为微秒值(百万分之一秒)。这些值分别测量在用户代码和系统代码中花费的时间,如果多个 CPU 内核正在执行此过程的工作,则最终可能会大于实际运行的时间。
上一个调用的结果 process.cpuUsage() 可以作为参数传递给函数,以获得差异读数
const { cpuUsage } = require('node:process')
const startUsage = cpuUsage();
// { user: 38579, system: 6986 }
// 让 CPU 旋转 500 毫秒
const now = Date.now();
while (Date.now() - now < 500);
console.log(cpuUsage(startUsage));
// { user: 514883, system: 11226 }process.cwd()
返回Node.js进程的当前工作目录
const { cwd } = require('node:process');
console.log(`当前目录: ${cwd()}`);process.debugPort
启用时Node.js调试器使用的端口
const process = require('node:process');
process.debugPort = 5858;process.dlopen(module, filename[, flags])
flags默认值:os.constants.dlopen.RTLD_LAZY该process.dlopen()方法允许动态加载共享对象。它主要用于require()加载 C++ 插件,除非在特殊情况下,否则不应直接使用。换句话说,除非有特定原因,例如自定义 dlopen 标志或从 ES 模块加载,require()否则应该优先process.dlopen()于此。
该 flags 参数是一个整数,允许指定 dlopen 行为
调用 process.dlopen() 时的一个重要要求是必须传递 module 实例。然后可以通过 访问 C++ 插件导出的函数 module.exports
下面的示例演示如何加载名为 local.node 的 C++ 插件,用于导出函数 foo 。在调用返回之前,通过传递 RTLD_NOW 常量加载所有符号。在此示例中,假定常量可用
const { dlopen } = require('node:process');
const { constants } = require('node:os');
const { join } = require('node:path');
const module = { exports: {} };
dlopen(module, join(__dirname, 'local.node'), constants.dlopen.RTLD_NOW);
module.exports.foo();process.emitWarning(warning[, options])
第二种写法:process.emitWarning(warning[, type[, code]][, ctor])
warning| 发出的警告options| 选项type当警告是字符串时,类型是用于发出警告类型的名称。默认值:"Warning"。code发出的警告实例的唯一标识符ctor当warning是字符串时,ctor是一个可选函数,用于限制生成的堆栈跟踪。默认值:process.emitWarning。detail要包含在错误中的其他文本
获取抛出警告中的信息
const process = require('node:process');
process.on('warning', (warning) => {
console.warn(warning.name); // 'Warning'
console.warn(warning.message); // 'Something happened!'
console.warn(warning.code); // 'MY_WARNING'
console.warn(warning.stack); // Stack trace
console.warn(warning.detail); // 'This is some additional information'
});避免重复警告
最佳做法是,每个进程只应发出一次警告。为此,请将布尔 emitWarning() 值放在后面
const { emitWarning } = require('node:process');
function emitMyWarning() {
if (!emitMyWarning.warned) {
emitMyWarning.warned = true;
emitWarning('Only warn once!');
}
}
emitMyWarning();
// 发出:(节点:56339)警告:仅警告一次!
emitMyWarning();
// 不发出任何信号process.env
该 process.env 属性返回一个包含用户环境的对象
此对象的示例如下所示:
{
TERM: 'xterm-256color',
SHELL: '/usr/local/bin/bash',
USER: 'maciej',
PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
PWD: '/Users/maciej',
EDITOR: 'vim',
SHLVL: '1',
HOME: '/Users/maciej',
LOGNAME: 'maciej',
_: '/usr/local/bin/node'
}可以修改此对象,但此类修改不会反映在Node.js进程之外,也不会(除非明确请求)反映到其他 Worker 线程。换言之,以下示例将不起作用:
node -e 'process.env.foo = "bar"' && echo $foo而以下将:
const { env } = require('node:process');
env.foo = 'bar';
console.log(env.foo);赋值 process.env 会隐式将值转换为字符串。此行为已弃用。当值不是字符串、数字或布尔值时,Node.js 的未来版本可能会引发错误
const { env } = require('node:process');
env.test = null;
console.log(env.test);
// => 'null'
env.test = undefined;
console.log(env.test);
// => 'undefined'用于 delete 从 process.env 中删除属性。
const { env } = require('node:process');
env.TEST = 1;
delete env.TEST;
console.log(env.TEST);
// => undefined在 Windows 操作系统上,环境变量不区分大小写
const { env } = require('node:process');
env.TEST = 1;
console.log(env.test);
// => 1除非在创建 Worker 实例时明确指定,否则每个 Worker 线程都有自己的 process.env 副本 ,基于其父线程 process.env 的 ,或指定为 Worker 构造函数 env 选项的任何内容。对 process.env 的更改在线程中 Worker 不可见,只有主线程才能进行对操作系统或本机加载项可见的更改。在 Windows 上, process.env 与主线程不同,on 实例 Worker 的副本以区分大小写的方式运行。
process.execArgv
该 process.execArgv 属性返回在启动Node.js进程时传递的一组特定于Node.js的命令行选项。这些选项不会出现在 process.argv 属性返回的数组中,并且不包括Node.js可执行文件、脚本名称或脚本名称后面的任何选项。这些选项对于生成具有与父进程相同的执行环境的子进程非常有用。
node --icu-data-dir=./foo --require ./bar.js script.js --version结果: process.execArgv
["--icu-data-dir=./foo", "--require", "./bar.js"]以及 process.argv
['/usr/local/bin/node', 'script.js', '--version']process.execPath
该 process.execPath 属性返回启动Node.js进程的可执行文件的绝对路径名。符号链接(如果有)将得到解决。
C:\Program Files\nodejs\node.exeprocess.exit([code])
code退出代码。对于字符串类型,仅允许整数字符串(例如“1”)。默认值:0。 该process.exit()方法指示Node.js以退出状态同步code终止进程。如果code省略,则 exit 使用“成功”代码0或已设置的process.exitCode值。在调用所有'exit'事件侦听器之前,Node.js不会终止。
const { exit } = require('node:process');
exit(1);process.exitCode
退出代码。对于字符串类型,只允许使用整数字符串(例如,“1”)。默认值: undefined
当进程正常退出或退出方式时,该数字将是进程退出代码,或者在未指定代码的情况下退出 process.exit()
指定代码 将 process.exit(code) 覆盖 的任何先前设置 process.exitCode 值
process.getegid()
该 process.getegid() 方法返回Node.js进程的数值有效组标识
process.geteuid()
该 process.geteuid() 方法返回进程的数字有效用户标识
process.getgid()
该 process.getgid() 方法返回进程的数字组标识
process.getgroups()
方法返回一个包含补充组 ID 的数组。 POSIX 未指定是否包含有效组 ID,但 Node.js 确保始终如此。
process.getuid()
该 process.getuid() 方法返回进程的数字用户标识。
process.initgroups(user, extraGroup)
user用户名或数字标识符extraGroup附加组名或数字标识符 该process.initgroups()方法读取/etc/group文件并初始化组访问列表,使用用户所属的所有组。这是一项特权操作,要求Node.js进程具有root访问权限或CAP_SETGID功能。
删除权限时要小心:
const { getgroups, initgroups, setgid } = require('node:process');
console.log(getgroups()); // [ 0 ]
initgroups('nodeuser', 1000); // switch user
console.log(getgroups()); // [ 27, 30, 46, 1000, 0 ]
setgid(1000); // drop root gid
console.log(getgroups()); // [ 27, 30, 46, 1000 ]process.kill(pid[, signal])
pid进程IDsignal要发送的信号,可以是字符串或数字。默认值:'SIGTERM'process.kill()方法将信号发送到由pid标识的进程。
信号名称是字符串,例如 “SIGINT” 或 “SIGHUP”
process.memoryUsage()
返回一个对象,该对象描述以字节为单位的 Node.js 进程的内存使用情况。
const { memoryUsage } = require('node:process');
console.log(memoryUsage());
// Prints:
// {
// rss: 4935680,
// heapTotal: 1826816,
// heapUsed: 650472,
// external: 49879,
// arrayBuffers: 9386
// }heapTotal和heapUsed指的是 V8 的内存使用情况。external指的是与 V8 管理的 JavaScript 对象绑定的 C++ 对象的内存使用情况rss(驻留集大小)是进程在主内存设备(即总分配内存的子集)中占用的空间量,包括所有 C++ 和 JavaScript 对象和代码。arrayBuffers指的是为ArrayBuffers和SharedArrayBuffers分配的内存,包括所有 Node.js Buffers。这也包含在外部值中, 当 Node.js 用作嵌入式库时,该值可能为0,因为在这种情况下可能无法跟踪ArrayBuffer的分配。
使用 Worker 线程时, rss 将为对整个进程有效的值,而其他字段将仅引用当前线程。
该 process.memoryUsage() 方法循环访问每个页面以收集有关内存使用情况的信息,根据程序内存分配,这些信息可能会很慢
process.nextTick(callback[, ...args])
callback回调函数...args调用回调时要传递的附加参数process.nextTick()将callback添加到“下一个任务队列”。在 JavaScript 堆栈上的当前操作运行完成之后且在允许事件循环继续之前,此队列将完全排空,如果要递归调用process.nextTick(),则可能会创建无限循环
const process = require('node:process');
console.log('start')
process.nextTick(() => {
console.log('nextTick callback');
})
console.log('end');
/**
* 打印结果:
* start
* end
* nextTick callback
*/何时使用 queueMicrotask() vs process.nextTick()
queueMicrotask:微任务队列,异步执行,在微任务之前执行 该 queueMicrotask() API 是一种替代方案 process.nextTick() ,它还使用相同的微任务队列来延迟函数的执行,该队列用于执行已解决承诺的 then、catch 和 finally 处理程序
在Node.js内,每次 “下一个任务队列” 被清空时,微任务队列都会立即被清空。
在简单方案中,queueMicrotask() 可以直接替代 process.nextTick()
const { nextTick } = require('node:process');
queueMicrotask(() => console.log('1'));
Promise.resolve().then(() => console.log('2'))
nextTick(() => console.log('3'))
// 打印:3, 1, 2从下一个任务队列和微任务队列中引发的错误处理方式略有不同。在排队的微任务回调中引发的错误应尽可能在排队的回调中处理。如果不是, process.on('uncaughtException') 则可以使用事件处理程序来捕获和处理错误。
如有疑问,除非需要特定 process.nextTick() 功能,否则请使用 queueMicrotask() .
process.permission
此 API 可通过 --experimental-permission 标志设置
process.permission 是一个对象,其方法用于管理当前进程的权限。权限模型中提供了文档属性
process.permission.has(scope[, reference])
检查进程是否具有文件系统访问权限
可用的范围包括:
fs- 所有文件系统fs.read- 文件系统读取操作fs.write- 文件系统写入操作child- 子进程生成操作worker- 工作线程生成操作
// 检查进程是否有权限读取README文件
process.permission.has('fs.read', './README.md');
// 判断进程是否有读权限操作
process.permission.has('fs.read');process.pid
该 process.pid 属性返回进程的 PID。
const { pid } = require('node:process');
console.log(pid)process.platform
该 process.platform 属性返回一个字符串,该字符串标识为其编译Node.js二进制文件的操作系统平台。
目前可能的值为:
aix'darwin''freebsd''linux''openbsd''sunos''win32'如果Node.js是在 Android 操作系统上构建的,则也可能返回该值'android'。但是,Node.js 中的 Android 支持是实验性的
process.ppid
该 process.ppid 属性返回当前进程的父进程的 PID。
const { ppid } = require('node:process');
console.log(`父进程的 pid 是:${ppid}`);process.release
该 process.release 属性返回与当前版本相关的 Object 包含元数据,包括源 tarball 和仅标头 tarball 的 URL。 process.release 包含以下属性:
name一个永远是'node'的值。sourceUrl指向包含当前版本源代码.tar.gz的文件的绝对 URL。headersUrl指向仅包含当前版本的源头文件.tar.gz的文件的绝对 URL。此文件比完整的源文件小得多,可用于编译Node.js本机附加组件libUrl| 指向与当前版本的体系结构和版本匹配node.lib的文件的绝对 URL。此文件用于编译Node.js本机附加组件。此属性仅存在于 Node.js 的 Windows 版本中,在所有其他平台上都将缺失lts| 标识此版本的 LTS 标签的字符串标签。此属性仅适用于 LTS 版本,并且适用于undefined所有其他版本类型,包括当前版本。有效值包括 LTS 版本代码名称(包括不再支持的代码名称)。'Fermium'对于从 14.15.0 开始的 14.x LTS'Gallium'对于从 16.13.0 开始的 16.x LTS'Hydrogen'对于从 18.12.0 开始的 18.x LTS
{
name: 'node',
lts: 'Hydrogen',
sourceUrl: 'https://nodejs.org/download/release/v18.14.0/node-v18.14.0.tar.gz',
headersUrl: 'https://nodejs.org/download/release/v18.14.0/node-v18.14.0-headers.tar.gz',
libUrl: 'https://nodejs.org/download/release/v18.14.0/win-x64/node.lib'
}在源代码树的非发布版本的自定义生成中,可能只存在该 name 属性。不应依赖其他属性的存在。
process.report
process.report 是一个对象,其方法用于生成当前进程的诊断报告
process.report.compact
以紧凑的单行 JSON 格式编写报告,与为人类使用而设计的默认多行格式相比,日志处理系统更容易使用
process.resourceUsage()
返回: 当前进程的资源使用情况。所有这些值都来自返回 uv_rusage_t 结构的 uv_getrusage 调用
process.send(message[, sendHandle[, options]][, callback])
message| 要发送的消息sendHandle| 要发送的句柄options| 选项keepOpen传递 的net.Socket实例时可以使用的值。当true时,套接字在发送过程中保持打开状态。默认值:false如果使用 IPC 通道生成Node.js,则该process.send()方法可用于向父进程发送消息。消息将作为父ChildProcess对象上'message'的事件接收
如果 Node.js 不是使用 IPC 通道生成的, process.send 则为 undefined。
消息经过序列化和解析。生成的消息可能与最初发送的消息不同
process.setegid(id)
id| 组名称或 ID 该process.setegid()方法设置进程的有效组标识
process.stderr
process.stderr 属性返回连接到 stderr (fd 2) 的流。它是一个 net.Socket (这是一个双工流),除非 fd 2 引用一个文件,在这种情况下它是一个可写流。
process.stderr 与其他 Node.js 流有很多重要的不同之处
process.stdin
该 process.stdin 属性返回连接到 stdin (fd 0 ) 的流。它是一个 net.Socket (双工流),除非 fd 0 引用一个文件,在这种情况下,它是一个可读流
process.title
该 process.title 属性返回当前进程标题(即返回 ps 的当前值)。分配一个新值以 process.title 修改 的 ps 当前值
process.uptime()
返回当前Node.js进程运行的秒数, 返回值包括几分之一秒。用于 Math.floor() 获取整秒
process.version
该 process.version 属性包含Node.js版本字符串。
process.versions
该 process.versions 属性返回一个对象,其中列出了 Node.js 的版本字符串及其依赖项
将生成类似于以下内容的对象:
{
node: '18.14.0',
v8: '10.2.154.23-node.22',
uv: '1.44.2',
zlib: '1.2.13',
brotli: '1.0.9',
ares: '1.18.1',
modules: '108',
nghttp2: '1.51.0',
napi: '8',
llhttp: '6.0.10',
uvwasi: '0.0.14',
acorn: '8.8.1',
simdutf: '3.1.0',
undici: '5.14.0',
openssl: '3.0.7+quic',
cldr: '42.0',
icu: '72.1',
tz: '2022g',
unicode: '15.0',
ngtcp2: '0.8.1',
nghttp3: '0.7.0'
}Exit codes (退出代码)
当没有更多异步操作挂起时,Node.js通常会退出并显示 0 状态代码。在其他情况下使用以下状态代码:
- 1 未捕获的致命异常:存在未捕获的异常,并且未由域或“uncaughtException”事件处理程序处理
- 2:未使用(由 Bash 保留用于内置误用)
- 3 内部 JavaScript 解析错误:Node.js 引导过程中内部的 JavaScript 源代码导致了解析错误。这种情况极为罕见,通常只会在 Node.js 本身的开发过程中发生。
- 4 内部 JavaScript 评估失败:Node.js 引导过程中的内部 JavaScript 源代码在评估时无法返回函数值。这种情况极为罕见,通常只能在Node.js本身的发育过程中发生。
- 5 致命错误:V8 中存在致命且不可恢复的错误。通常,一条带有前缀 FATAL ERROR 的消息将打印到 stderr
- 6 非函数内部异常处理程序:存在未捕获的异常,但内部致命异常处理程序函数不知何故设置为非函数,无法调用。 更多查看 nodejs官网
CodeVortex