我知道google的v8会将javascript编译成本机(如果我理解正确,则为二进制)代码 有没有办法获取输出并将其转换为exe?
答案 0 :(得分:7)
我认为您不能使用V8直接将JavaScript转换为可执行文件,但您可以创建一个将V8引擎与JavaScript捆绑在一起并将其作为独立运行的应用程序。
您可以在its project page上找到有关V8的所有信息。
另请注意,JavaScript无法完全编译,因为它是动态语言。使用V8,它是JIT编译的(例如.NET。)。仍然可以将它变成一个独立的可执行文件(例如.NET)。
如果您想开发使用HTML进行渲染的独立应用程序,您也可以查看Adobe Air。
答案 1 :(得分:6)
Javascript不能只编译一次。该语言具有 eval ,它被广泛使用。 (例如,对于JSON)您需要随身携带JIT和整个运行时。
这里的JIT只是一种优化,而不是摆脱编译器/解释器的方法。
答案 2 :(得分:3)
Node.js嵌入了V8。这可能是一个值得学习的好例子。
答案 3 :(得分:3)
尝试将js变成本机代码已经有了一些尝试,但它不是可以通过任何方式在生产中使用的东西,更多的是学术兴趣。 用于java的Rhino解释器有一个选项可以将js转换为(java)字节码,因此一种方法是转换为字节码,然后从字节码转换为GCJ本机代码。有一些关于Rhino和GCJ的讨论,但我不知道是否有人曾经尝试过。 https://groups.google.com/forum/#!msg/netscape.public.mozilla.jseng/c3tqyLZ19fw/8V4HeuMtIXUJ
另一种方法是使用Python,特别是Py-Py,它本身是用非标准的Python子集rPython编写的。 rPython不适合人类消费,但它具有可以编译为本机的优点。一个有趣的(尽管是古怪的)实验是将Javascript编译为Python,然后在某些情况下,Python恰好作为rPython有效,并且可以使用rPython编译器编译为本机。
http://mozakai.blogspot.com/2010/07/experiments-with-static-javascript-as.html
如果.exe文件非常重要,我会将V8与您的应用程序捆绑在一起,因为即使您可以将js编译为native,如果您使用任何eval()或类似代码,仍需要完整的解释器。只要您的用户不介意8MB exe或8MB V8.dll文件,编写一个将所有内容捆绑到.exe文件中的工具就不难了。
作为最后一个想法,Big G已经开始允许基于chrome的“本机”应用程序(谷歌:“Chrome打包应用程序”)。它们具有低级系统访问权限,并且可以使用WebKit渲染器,允许您使用CSS和HTML创建GUI,并且它们具有自己的窗口和图标,因此它们在chrome内部运行并不明显。这可能还为时过早,但需要关注桌面应用程序领域。