我知道 google 的 v8 将 javascript 编译为本机(如果我理解正确,则为二进制)代码。
有没有办法获取输出并将其转换为 exe?
4 回答
我不认为您可以使用 V8 直接将一段 JavaScript 转换为可执行文件,但您可以制作一个将 V8 引擎与 JavaScript 捆绑在一起并作为独立运行的应用程序。
您可以在其项目页面上找到有关 V8 的所有信息。
另请注意,JavaScript 不能完全编译,因为它是一种动态语言。使用 V8,它是 JIT 编译的(例如 .NET。)尽管如此(例如 .NET)仍然可以将其转换为独立的可执行文件。
如果您想开发使用 HTML 进行渲染的独立应用程序,您也可以看看Adobe Air。
Javascript 不能只编译一次。该语言具有非常广泛使用的eval 。(例如 JSON)您需要携带 JIT 和整个运行时。
这里的 JIT 只是一种优化,而不是摆脱编译器/解释器的方法。
Node.js嵌入了 V8。这可能是一个值得学习的好例子。
已经有一些尝试将 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 编译为本机,如果您使用任何 eval() 或类似文件,您仍然需要一个完整的解释器。只要您的用户不介意 8MB exe 或 8MB V8.dll 文件,编写一个将所有内容捆绑到 .exe 文件中的工具并不难。
作为最后的想法,Big G 已经开始允许基于 chrome 的“原生”应用程序(谷歌:“chrome packaged apps”)。它们具有低级系统访问权限,并且可以使用 WebKit 渲染器,允许您在 CSS 和 HTML 中创建 GUI,并且它们有自己的窗口和图标,因此它们在 chrome 中运行并不明显。这可能还为时过早,但在桌面应用程序领域值得关注。