【问题标题】:Best way to evaluate javascript source code module with node.js使用 node.js 评估 javascript 源代码模块的最佳方法
【发布时间】:2021-09-28 09:46:53
【问题描述】:

使用节点,我转译了一个 typescript tsx 文件 int javascript。然后我需要调用该 javascript 代码中描述的函数。使用 ES6 模块。

我用

writeFileSync('./temp/page1.js', js) // js is the module source code
import page from '../temp/page1.js'

page 是这里的默认导出,这是我要调用的函数。

这很好,但我想知道是否有更好的方法来调用模块源代码中的函数?一种避免将源代码保存到临时文件中的方法。

eval 不会是安全问题,但我认为它不会给我默认导出,在这个旧函数中不考虑模块。

也许与节点有关?

我发现 https://www.npmjs.com/package/node-eval 可以避免文件保存,尽管它仍然需要文件名,这会导致我的代码有些脆弱。

节点:模块 节点:虚拟机

可能很有希望,看看https://github.com/node-eval/node-eval/blob/master/index.js,但我还没有弄清楚是否以及如何。

类似,但与 require 更相关:Load node.js module from string in memory

https://github.com/floatdrop/require-from-string 也没有用

所有带有 node:vm 的变体

import vm from 'node:vm'
let context = vm.createContext({}, {name:"temp1.mjs"})
vm.runInContext(js, context, {filename: "temp2.mjs"})

导致“无法在模块外使用 import 语句”

【问题讨论】:

  • 你在什么环境下运行它?网页?
  • 在节点中。最后,这将是一个打包插件,比如一个雪包插件。
  • rtm vm: nodejs.org/api/vm.html - 取决于您的使用情况,您可能正在寻找 vm.runInNewContext,看来您本质上想以安全的方式执行 js var 中的内容,您可以在上下文、新内容或此上下文中使用 vm 模块。
  • 是的,我可能会找到一种方法,会挖掘它。谢谢

标签: javascript node.js eval es6-modules


【解决方案1】:

最好的方法是节点 vm.Module 类

https://nodejs.org/api/vm.html#vm_module_evaluate_options

但那是在草稿阶段和功能标志后面。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2016-12-23
    • 2013-03-25
    • 1970-01-01
    • 2011-11-25
    • 2016-04-17
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多