我可以 运行 一个带有来自缓冲区而不是来自另一个文件的节点脚本的节点子进程吗?
Can I run a node child process with node script from a buffer and not from another file?
目前我正在从父节点脚本在 string/buffer 中生成节点脚本。然后我在一个文件中编写生成脚本并在子进程中执行该文件。最后我取消链接临时脚本文件。
这里是简化的代码:
fs.writeFileSync(scriptFile, program_code);
script_output = child_process.execSync("node " + scriptFile).toString('utf8');
fs.unlinkSync(scriptFile);
现在我有了输出,我继续进一步处理。这很好用。
但是,我觉得如果我能以某种方式 运行 我拥有的内存缓冲区中的节点脚本而不是先将其写入文件,则可以避免写入临时文件的开销.
我查看了 node 的 child_process 模块,但没有找到任何方法来执行此操作。可能是我错过了什么,还是有其他方法可以做到这一点?我正在寻找这样的东西:
script_output = child_process.execSync("node " + ...).toString('utf8')
也许是一些 shell 编程技巧?我查看了节点的 -e
和 -i
选项,但没有删除它。我使用 -i 选项尝试了 <<
here document shell 功能,但是 REPL
模式的 <
提示似乎产生了语法问题。
查看 Node 的 VM API。我实际上还没有尝试过这个,但看起来 vm.runInNewContext()
可以在不启动 Node 的新副本的情况下完成你需要的事情。
目前我正在从父节点脚本在 string/buffer 中生成节点脚本。然后我在一个文件中编写生成脚本并在子进程中执行该文件。最后我取消链接临时脚本文件。
这里是简化的代码:
fs.writeFileSync(scriptFile, program_code);
script_output = child_process.execSync("node " + scriptFile).toString('utf8');
fs.unlinkSync(scriptFile);
现在我有了输出,我继续进一步处理。这很好用。
但是,我觉得如果我能以某种方式 运行 我拥有的内存缓冲区中的节点脚本而不是先将其写入文件,则可以避免写入临时文件的开销.
我查看了 node 的 child_process 模块,但没有找到任何方法来执行此操作。可能是我错过了什么,还是有其他方法可以做到这一点?我正在寻找这样的东西:
script_output = child_process.execSync("node " + ...).toString('utf8')
也许是一些 shell 编程技巧?我查看了节点的 -e
和 -i
选项,但没有删除它。我使用 -i 选项尝试了 <<
here document shell 功能,但是 REPL
模式的 <
提示似乎产生了语法问题。
查看 Node 的 VM API。我实际上还没有尝试过这个,但看起来 vm.runInNewContext()
可以在不启动 Node 的新副本的情况下完成你需要的事情。