dynamic-repl
v1.0.0
Published
dynamic repl
Readme
dynamic-repl
一个动态的、可自定义的 Node.js REPL 环境,提供增强的交互式 JavaScript 执行功能。
特性
- 动态上下文:支持自定义执行上下文,可以注入自定义对象和函数
- 智能表达式返回:自动为最后一个表达式添加返回语句,无需手动输入
return - 交互式调试:提供带彩色提示的交互式 REPL 环境
- 异步支持:原生支持异步函数和 Promise
- 代码编辑模式:支持
.editor命令进行多行代码编辑 - 自定义变量访问:通过 evaluator 函数控制所有变量的访问过程
安装
npm install dynamic-repl使用
基本使用
import { startDynamicRepl } from 'dynamic-repl';
// 启动一个基本的 REPL
await startDynamicRepl();自定义上下文
import { startDynamicRepl } from 'dynamic-repl';
// 注入自定义对象到 REPL 上下文
const customContext = {
greeting: 'Hello World',
multiply: (a, b) => a * b,
obj: { name: 'dynamic-repl', version: '1.0.0' }
};
await startDynamicRepl(customContext);使用自定义评估函数
import { startDynamicRepl } from 'dynamic-repl';
// 使用自定义的评估函数,允许访问本地作用域变量
const localVar = 'Hello from local context';
// evaluator 函数用于控制 REPL 中所有变量的访问过程
await startDynamicRepl({}, (param) => {
// 当 REPL 中的代码访问任何变量时,都会调用此函数
// 可以访问 localVar 等本地作用域变量
return eval(param);
});高级用法 - 完全自定义变量访问控制
import { startDynamicRepl } from 'dynamic-repl';
// 实现完全自定义的变量访问控制逻辑
await startDynamicRepl(
{ /* 自定义上下文对象 */ },
(param) => {
// 在此处实现自定义的变量访问控制逻辑
// 例如:添加安全检查、变量过滤、日志记录等
console.log('访问变量:', param);
return eval(param);
}
);API
startDynamicRepl(ctx?, evaluator?)
启动一个动态的 REPL 会话。
ctx{Record<string, any>} - (可选) 注入到 REPL 上下文的对象,默认为空对象{}evaluator{(param: string) => any} - (可选) 自定义评估函数,默认为(param) => eval(param)- 当 evaluator 函数被提供时,所有在 REPL 中访问的变量都会通过此函数处理
- 通过 Proxy 实现,控制所有变量的访问过程
- 可以访问启动 REPL 时的本地作用域变量
特殊命令
.reset- 重置评估上下文.exit- 退出 REPL.editor- 进入多行代码编辑模式
功能说明
智能表达式返回
dynamic-repl 会自动为最后一个表达式添加 return 语句,使得表达式的结果可以直接返回:
> 1 + 1
2
> const a = 5
undefined
> a * 2
10异步代码执行
支持异步代码的执行:
> await fetch('https://api.example.com')
Response { ... }
> (async () => {
const response = await fetch('...');
return await response.json();
})()
{ ... }测试
运行测试套件:
npm test依赖
许可证
ISC
