c++ - 如何将 Node.js 解释器嵌入到 C/C++ 中?

标签 c++ c node.js

我想在我的 C/C++ 应用程序中使用 Node.js 脚本。有人建议我从 v8、libev 和 libeio 开始;但这意味着从头开始重写 Node.js。

那么,是否可以将 Node.js 嵌入到 C 或 C++ 中?

最佳答案

您应该首先考虑是否足以将您的应用程序实现为 Node 的 C++ 模块,然后将主要部分粘合为 Node 脚本

否则你可能希望“重新实现Node”,以核心代码为例, 删除不需要的部分(例如 HTTP 模块),然后放置组件 进去。最不痛苦的方法是进行子树合并并删除构建系统,然后在构建脚本中添加前缀以指向它所在的目录。 然后你可以停止构建某些部分。然而,Node 的构建系统包含多个部分,这可能是一项非常困难的工作。

您还可以尝试使用默认加载的内容重新打包 Node 并更改可执行文件的名称。然而,这只是采用我所描述的第一种方法的一种更复杂的方法,您可以在 /usr/bin/ 中安装一个脚本,它将如下所示:

  #!/usr/bin/node
  var myAppMain = require('libmyApp');
  myAppMain.withConfig(filename,
  function(err, cnf) {
     if (err) throw err; // parser or file access error
     cnf.evalMe();
  });

您可以使用 JSlint 作为解析器,然后使用 grep 进行危险调用,然后使用 eval(conf_script) 或者只使用 require(config.js),尽管您会需要添加 exports.someMethod = function (...) {...}。但是 require() 通常更安全,但是您可能希望为您的配置实现一个预处理器,它将替代 exports.someMethod = function (...) {... } 而不是您的函数,并将附加 require('OnlyCallMySafeMethods') 并拒绝任何 尝试 require('fs') 或您可能害怕让某人使用的其他库。 这种安全性只是您可能希望拥有的一种可选的东西,这完全取决于您。 虽然我想你可能想用 exports.someMethod = .... 替换并在顶部添加一个 require('myAppConfigLib) 以便用户将只需使用您的 API 以及他们可能希望放入其脚本/配置中的任何内容!

更新: line 66 上有一条非常有用的评论src/node.js:

  // To allow people to extend Node in different ways, this hook allows
  // one to drop a file lib/_third_party_main.js into the build
  // directory which will be executed instead of Node's normal loading.

另请注意,src/ 的内容在构建时被编译为字节码。

关于c++ - 如何将 Node.js 解释器嵌入到 C/C++ 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55964754/

相关文章:

c++ - 如果不在同一范围内,则无法打开 SFML 2 窗口

c++ - 在同一类模板中存储常量或非常量引用

c - 函数指针数组的长度

node.js - Sails 0.10 & 多对多关联 - 获取所有关联数据,而不仅仅是第一个

node.js - NodeJS 服务器上的 Mongoose 查询返回 NULL

javascript - 带有两个注册表的 npm package.json

c++ - 请帮助我理解这种语法(在 C++ 中实现静态断言)

c++ - Cygwin gcc 在 IDE 中编译失败,提示 'exit' 未声明

c++ - 通过指针访问数组

c++ - 存储只读数据混合程序集和 C++