js引擎vm.compileFunction
适用版本:Node.js v10.10+(新增的 API)
此 API 来自 Node.js 的 vm 模块,不是浏览器 JS。
📌 vm.compileFunction(code, params?, options?)
共有 3 个参数:
-
code(必填) -
params(可选) -
options(可选)
下面逐个解释。
1️⃣ code(必填)
类型:string
函数体的源码(不包括 function() 声明)。
等同于:
2️⃣ params(可选)
类型:string[]
函数的形参名称数组。
等价于:
3️⃣ options(可选,重点)
类型:object
options 是强大的部分,常用于沙箱、安全控制、上下文隔离。
| 选项名 | 类型 | 说明 |
|---|---|---|
cachedData |
Buffer |
使用 V8 预编译字节码,提高性能 |
produceCachedData |
boolean |
是否生成 cachedData |
parsingContext |
vm.Context |
提供函数执行的上下文(沙箱) |
contextExtensions |
object[] |
附加到作用域里的额外对象 |
filename |
string |
报错时显示的文件名 |
lineOffset |
number |
报错行号偏移 |
columnOffset |
number |
报错列偏移 |
四 与 new Function 的区别(非常关键)
| API | 能否控制作用域/sandbox | 是否安全 | 是否可自定义全局对象 |
|---|---|---|---|
| eval() | ❌ 逃逸到真实作用域 | ❌ 危险 | ❌ |
| new Function() | ❌ 真实 global | ❌ 危险 | ❌ |
| vm.compileFunction() | ✔ 自定义沙箱 | ✔ 更安全 | ✔ 强大的上下文隔离 |
compileFunction 用于:
-
执行用户代码
-
插件机制
-
模板引擎
-
运行动态脚本
-
防止代码访问 Node 真实 global

浙公网安备 33010602011771号