Javascript 如何使用GraalVM创建node.js本机映像
我正在尝试从一个简单的node.jsJavascript 如何使用GraalVM创建node.js本机映像,javascript,node.js,graalvm,Javascript,Node.js,Graalvm,我正在尝试从一个简单的node.jsexample.js应用程序创建一个本机映像 使用以下命令运行应用程序时: node --native -i --native example.js 然后,应用程序启动并按预期工作 现在我想创建一个本地映像。我尝试了以下命令: native-image --language:js example.js 但是,由于以下错误,它无法工作: Build on Server(pid: 77626, port: 64052) [example.js:77626]
example.js
应用程序创建一个本机映像
使用以下命令运行应用程序时:
node --native -i --native example.js
然后,应用程序启动并按预期工作
现在我想创建一个本地映像。我尝试了以下命令:
native-image --language:js example.js
但是,由于以下错误,它无法工作:
Build on Server(pid: 77626, port: 64052)
[example.js:77626] classlist: 3,964.04 ms
error: Main entry point class 'example.js' not found.
Error: Processing image build request failed
作为解决方案,我在example.js
中创建了一个主入口点,例如:
function main(args) {
console.log("Main app started")
}
然而,这不起作用
是否有一种通常为js/node.js应用程序创建本机映像的方法?否。目前,截至2018年12月,无法为node.js应用程序创建GraalVM本机映像。本机映像实用程序获取Java字节码并提前编译。GraalVM JavaScript引擎是一个Java程序,可以编译为本机映像。这是执行
$GRAALVM\u HOME/bin/js
时实际运行的内容。它仍然在运行时加载JavaScript,对其进行解释并及时编译为机器代码
GraalVM的节点实现是一个普通的节点
,一个本机应用程序,JavaScript引擎被GraalVM的引擎所取代
GraalVM团队正在试验各种可能的方法来保存JavaScript程序的预编译部分,可能是一个标准库,也可能是应用程序的一部分,但何时可用以及以何种形式保存尚不清楚 AFAICT在GraalVM中,JS支持有两个方面:“香草”JS支持和nodejs支持 Oleg在这里的回答清楚地解释了为什么不可能为nodejs应用程序构建本机映像 但是,似乎可以构建运行“香草”JS的本机映像:
您还可以尝试更复杂的
ExtListDir
示例,该示例利用了GraalVM的Java和JavaScript多语言功能
该示例的代码位于:在本例中,JS应用程序有一个Java“包装器”。我相信这是一个必要的部分——换句话说,GraalVM并不“将JavaScript编译为本机”,而是编译一个Java应用程序,其中包括一个用Java实现的JavaScript引擎 也许这就是Oleg所说的“GraalVM团队正在试验保存JavaScript程序预编译部分的可能方法”,即拥有一些用于运行JS应用程序的标准Java样板,以便您可以直接将纯JS应用程序编译为本机映像。我猜这实际上类似于Node或Deno,但用Java实现 问题的另一方面是,如果您想在JS应用程序中使用NodeJS功能或包含来自npm模块的代码 GraalVM指出Javascript引擎实现ES11,基本上是所有现代JS: 似乎可以使用JS工具将nodejs代码转换为“普通”JS,由Graal的JS引擎运行
然后,使用适当的Java包装器代码,您可以将所有这些编译成一个本机映像。如果很快会包括这些,是否有时间表?