是否可以将NodeJS作为脚本引擎包含在可执行文件中



我有一个用C编写的应用程序。我想在这个应用程序中执行用JavaScript编写的用户定义脚本,并允许这些脚本与映射到JavaScript命名空间的内部C变量一起工作。

是否可以使用NodeJS将其编译为脚本引擎?

我知道我可以反之亦然:运行NodeJS并使用我的C代码作为NodeJS的库,并将C变量正确绑定到JS。但这是不可接受的,因为我的应用程序有一个GUI和许多其他模块,这些模块都是作为库包含的,而且很难重写代码以作为NodeJS库运行。

由于性能原因,我也不想每次需要运行脚本时都将NodeJS作为外部可执行文件运行。我需要将NodeJS保存在内存中,并在整个过程周期中在同一命名空间中运行脚本。

也许有一些NodeJS的特别版就是为了这个目的?或者我可以这样编译它?

下面是一个使用v8:执行某些javascript的示例

int main(int argc, char* argv[]) {
  // Create a string containing the JavaScript source code.
  String source = String::New("'Hello' + ', World'");
  // Compile the source code.
  Script script = Script::Compile(source);
  // Run the script to get the result.
  Value result = script->Run();
  // Convert the result to an ASCII string and print it.
  String::AsciiValue ascii(result);
  printf("%sn", *ascii);
  return 0;
}

发件人:https://developers.google.com/v8/get_started

您需要的是V8 javascript引擎。查看此处了解更多详细信息。。。

This document discusses these concepts further and introduces others that are key to embedding V8 within your own C++ application.

使用nodejs的目的可能是查看它的源代码,了解如何在V8引擎的基础上构建。

这里有一个快速的例子。

为什么不探索Node的内部,并"复制"它正在做的事情。然后你可以在V8的基础上构建你的应用程序。毕竟,Node.JS只是V8和几个库(I/O)之上的一层,用于提供额外的功能。

最新更新