🪛

内嵌 JS/TS

示例

package main import ( "github.com/sohaha/zlsgo/zlog" "github.com/zlsgo/js" ) func main() { js := js.New() res, err := js.Run([]byte(`const m = 1;m`)) if err != nil { zlog.Error("执行失败", err) return } zlog.Debug("执行结果", res) }
 

配置

js.New(func(o *js.Option) { o.Timeout = time.Minute * 3 // 脚本执行最长时间 o.Dir = zfile.RealPath(".") // 脚本文件目录 o.Args = map[string]interface{}{} // 传入参数 o.DisabledConsole = true // 禁用控制台输出 o.MaxPrograms = 1 << 10 // 最大缓存预处理脚本数量 })

更多用法

执行指定函数

package main import ( "github.com/sohaha/zlsgo/zlog" "github.com/zlsgo/js" ) func main() { vm := js.New() res, err := vm.RunForMethod([]byte(` const m = 1 function run(i){ return m * i } `),"run", 300) if err != nil { zlog.Error("执行失败", err) return } zlog.Debug("执行结果", res) }
 

执行模块化 TS

使用 commonJS 模块方式
// main.go package main import ( "github.com/sohaha/zlsgo/zlog" "github.com/zlsgo/js" ) func main() { vm := js.New() res, err := vm.RunModuleFile("./main.ts") if err != nil { zlog.Error("执行失败", err) return } zlog.Debug("执行结果", res) // 执行结果 map[default:map[js:yes world ts:hello world]] }
import { say } from "./m" import { jsSay } from "./m2" export default { ts: say("world"), js: jsSay("world") }
export function say(name: string) { return `hello ${name}` }
function jsSay(name) { return "yes " + name; } module.exports = { jsSay }