0.0.21 • Published 9 months ago

vm-node v0.0.21

Weekly downloads
-
License
-
Repository
-
Last release
9 months ago

简介

vm-node 是一款Node端代码沙箱,在vm2的基础上,额外解决了代码死循环、各类异常捕获等问题,沙箱内能共享所处运行环境的node_module中已安装的包

案例演示

const {createVM} = require('vm-node');
const vm = createVM({timeout: 30000})
// 或
const vm = createVM() // 默认超时时长:10s

// 正常使用1
vm.run('hooks.onFinished({name: "andy"})').then((data) => {
  console.log(data) // {name: "andy"}
})
// 正常使用2
vm.run(`
  const axios = require('axios');
  const wrapper = async () => {
    try {
      const res = await axios.get("http://localhost:8080/api/test");
      // 将结果传递至外部,并标记执行结束
      hooks.onFinished(res.data)
    } catch(e) {
      logger.log('出错了')
      logger.log(e.message)
    }
  }
  wrapper()
`).then(data => {
  console.log('沙箱执行结果是', data)
})

// 捕获内部错误1
vm.run('logger.log(a)').catch(e => {
  console.log('外部收到错误', e)
})
// 捕获内部错误2
vm.run(`Promise.reject('这是Promise错误信息')`).catch(e => {
  console.log('外部收到错误', e)
})
// 捕获内部错误3
vm.run('process.exit()').catch(e => {
  console.log('外部收到错误', e)
})

createVM

  • timeout: 沙箱代码超时配置
  • openLog: 是否开启log开关,开启则会将中间日志全部输出

内置全局变量

  • logger: 打印日志相关,涵盖了 log、info、warn、error
  • hooks:沙箱运行的生命周期钩子
    • onFinished: 沙箱执行结束,可以将内部数据传递至外部
    • onError:沙箱执行出错,会直接结束程序

Tips

  • 沙箱中的代码如果使用了外部依赖,请确保沙箱运行的外部环境有此依赖
  • 如果需要将沙箱中运行的结果传递至外部,请调用 hooks.onFinished 方法进行传递
0.0.20

10 months ago

0.0.21

9 months ago

0.0.18

12 months ago

0.0.19

12 months ago

0.0.17

1 year ago

0.0.15

1 year ago

0.0.14

1 year ago

0.0.13

1 year ago

0.0.12

1 year ago

0.0.11

1 year ago

0.0.10

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago