为什么会有这个东西有时候我们需要在 Node.js 里安全地执行用户提交的 JavaScript 代码。Node 自带的vm模块并不安全eval更不用提。QuickJS 很强大但需要原生编译。safe-eval、vm2等方案要么依赖繁杂要么维护停滞。如果有一个纯 Node.js 实现、零依赖、可以安全运行不可信代码的 JS 解释器呢这就是kernel-js-lite.架构一览传统 JS 引擎的经典三阶段 pipeline全部手写零依赖源代码 → 词法分析器 → Token 流 → 递归下降解析器 → AST → 树遍历解释器所有代码都在src/目录下结构清晰文件职责tokenizer.js词法分析将源码拆成 Token 流parser.js递归下降解析生成 ASTast.jsAST 节点定义environment.js作用域链管理objects.js所有内置对象Array / Object / String / Number / Boolean / Math / consoleinterpreter.jsAST 树遍历执行器含闭包、资源限制index.js对外 API 入口能做什么const { run, Kernel } require(kernel-js-lite) // 一秒上手 run(1 2 * 3) // 7 // 完整的 JS 语法支持函数、闭包、数组、对象 run( function makeCounter() { var count 0 return function() { return count count 1 } } var c makeCounter() c() c() // 3 ) // 绑定宿主函数Node.js 能力安全暴露给沙箱 const k new Kernel() k.hostFunction(fetchUser, (id) ({ id, name: Alice })) k.run(fetchUser(1).name) // Alice // 资源限制防止恶意脚本 run(while(true) {}, { maxInstructions: 10000 }) // → Error: Script execution timeout: max instructions exceeded内置对象进展经过 55 个版本的迭代目前已经实现了大量 ES 特性的内置方法Array:push,pop,map,filter,reduce,find,findLast,findIndex,sort,includes,indexOf,join,slice,splice,forEach,flat,reverse,at,fill,keys,values,entries,toReversed,toSorted,toSpliced,with,of,from,toString,toLocaleStringString:length,charAt,indexOf,includes,slice,split,toUpperCase,toLowerCase,toLocaleUpperCase,toLocaleLowerCase,trim,replace,replaceAll,concat,match,search,padStart,padEnd,trimStart,trimEnd,at,codePointAt,localeCompare,normalize,isWellFormed,valueOfObject:keys,values,entries,assign,fromEntries,create,is,freeze,seal,getPrototypeOf,setPrototypeOfNumber:toFixed,toExponential,toPrecision,toLocaleString,valueOf,parseInt,parseFloat,isNaN,isFinite,EPSILON,MAX_SAFE_INTEGERMath:abs,ceil,floor,round,max,min,pow,sqrt,random,PI,E,sign,trunc,cbrt,hypot,exp,log,sin,cos,tan,asin,acos,atan,atan2console:log,warn,error,info,debug,trace,time,timeEnd,count,countReset,group,groupEnd,table,assertJSON:stringify,parseSet: 基本实现其他:Date.now,encodeURI,decodeURI,escape,unescape,typeofCLI 工具除了作为库使用它还带了一个命令行工具kjs可以直接跑.kjs文件# 安装 npm install -g kernel-js-lite # 运行脚本 kjs hello.kjs # 或直接执行代码 kjs -e print(Math.PI) # 资源限制 kjs --max-instructions 5000 myscript.kjs.kjs扩展名是强制的出错会有友好的提示。适用场景在线代码编辑器— 安全执行用户提交的代码片段游戏脚本引擎— 给游戏提供可编程的能力类似 Minecraft 里的 ComputerCraft配置即代码— 运行用户自定义逻辑但又不想暴露完整 Node.js 能力CI/CD 流程— 安全执行用户定义的 pipeline 脚本教学工具— 理解 JS 引擎工作原理的绝佳参考完整、自包含、代码量适中一些数据指标值版本v1.55.0依赖0测试数225许可MIT安装npm install kernel-js-lite结尾kernel-js-lite 是一个小而美的纯 JS 解释器适合需要对不可信代码做沙箱执行的场景。它的设计哲学是零依赖、可嵌入、够用就好。没有 V8 那么快但对于控制台命令式的小脚本来说足够。项目地址https://www.npmjs.com/package/kernel-js-lite如果你在 Node.js 里需要安全地执行 JS 代码不妨试试看。