js引擎vm.compileFunction

适用版本:Node.js v10.10+(新增的 API)

此 API 来自 Node.js 的 vm 模块,不是浏览器 JS。


📌 vm.compileFunction(code, params?, options?)

共有 3 个参数

  1. code(必填)

  2. params(可选)

  3. options(可选)

下面逐个解释。


1️⃣ code(必填)

类型:string

函数体的源码(不包括 function() 声明)。

 
const fn = compileFunction('return a + b;');

等同于:

 
function (…) { return a + b; }

2️⃣ params(可选)

类型:string[]

函数的形参名称数组。

 
const fn = compileFunction( 'return a + b;', ['a', 'b'] ); fn(1, 2); // 3

等价于:

 
function(a, b) { return a + b; }

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

posted @ 2025-12-10 11:32  jerry-mengjie  阅读(0)  评论(0)    收藏  举报