如何不生成本地文件执行从S3下载的JS代码并提取sum_two方法
解决方案
你可以直接在内存中执行拿到的脚本字符串,不需要写入本地磁盘,有两种常用实现方式:
方案1:直接使用eval(适用于完全信任脚本来源的场景)
在你代码的省略号位置填入以下逻辑即可:
// 执行下载到的脚本字符串 eval(downloaded); // 此时sum_two函数已经挂载到当前作用域,可直接调用 console.log(sum_two(1, 2)); // 输出3
方案2:使用new Function隔离作用域(更稳妥,避免污染当前上下文)
如果不想让脚本里的变量污染当前作用域,可以用构造函数的方式执行并提取目标函数:
// 构造匿名函数,执行脚本后返回sum_two const extractSumTwo = new Function(`${downloaded}; return sum_two;`); const sum_two = extractSumTwo(); // 调用函数 console.log(sum_two(3, 4)); // 输出7
注意事项
- 两种方案均全程在内存中操作,不会产生本地临时文件,符合你的要求
- 直接执行远程来源的脚本存在代码注入风险,如果你无法确保S3上脚本的安全性,生产环境使用前请先做脚本完整性校验(比如提前存储脚本哈希值做对比、校验数字签名等)
内容的提问来源于stack exchange,提问作者JAN
相关产品推荐
相关产品推荐

