NodeJs VM - 将编译后的代码保存到磁盘?

5

来自http://nodejs.org/api/vm.html

JavaScript代码可以立即编译并运行,也可以编译、保存并稍后运行。[...] 返回的脚本不绑定到任何全局对象。它在每次运行之前都会绑定,仅供该次运行使用。

然后在API中,没有返回任何字节的方法,仅有一个“Script”对象。

所以,在我礼貌地拆掉我手臂下面的桌子之前,我是否可以实际上将编译后的脚本保存到磁盘上?我想这只是普通的原始二进制数据,可能是语法树或其他什么。


2
我原本计划将二进制结果作为闭源的Node.js应用程序进行销售。 - Silviu-Marian
1
看,我只是在寻找一种简单的技术;也许是获取分配的地址空间指针,将数据写入文件,重新加载数据到内存中...类似这样的东西;我有一些基本的“hack-through”技能,我可以编译DLL,但由于需要一些努力,所以我真的必须先问问。也许有不同的方法或一些现有的持续努力,我真的不知道。徽章是无意的。你为什么生气? - Silviu-Marian
1
拥有您这样网络经验水平的人竟然不理解“在问题中提供更多信息以便其他人能够给出正确答案”的概念。 - jcolebrand
1
嗯,你是个程序员。这意味着你们聪明到足以直觉出原因、情况等等。我自己也经常这样做,有时很显然,有时我必须填补空白。但无论如何,刮掉胡子,换个发型,多约些女孩吧。 - Silviu-Marian
2
剃了胡子,捐了9英寸头发给Pantene美丽长度。你想要将文件输出到一个只有二进制的产品中,这让我知道你想用这个文件做什么。比如说,如果可能的话,你希望它被混淆等等。很可能已经有人发布了一个node的包来编译像你描述的那样的东西。我不会推断任何人会将任何代码用于任何特定的用途,除了他们在问题中提出的。 - jcolebrand
显示剩余3条评论
1个回答

4
您所引用的函数是为在新上下文中运行的JavaScript提供支持(以便它可以更安全、具有新功能等)... 而不是保存预编译的二进制文件...
如果您想了解如何重新加载预编译的脚本的详细信息,可以查看node.js源代码。'node.js' 文件本身是预编译并作为二进制文件加载的(如果您使用此选项构建它)。这样做可以使node启动更快。
然而,您应该记住的是,除非您构思出一个特定的过程(例如使用V8库的node.js)来运行/停止/运行/停止...等,否则这样做几乎没有任何优势。原因是,V8库只会编译您的脚本一次 - 然后每次执行都将其作为机器代码执行,或者只要V8库正在运行。
预编译并作为二进制文件加载将带来一些显着的缺点,包括使您的程序架构依赖性(甚至跨x86 32位与x86_64)等。因此,这可能不是最佳的设计决策。

1
我和你一样,肯定希望这就是 OP 所问的。现在我很难过,因为我没有第一个打出这个答案。 - jcolebrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接