我想在我的 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/5525162/