我想在我的C/C++应用程序中使用Node.js脚本.有人建议我从v8,libev和libeio开始; 但这意味着从头开始重写Node.js.
那么,是否可以将Node.js嵌入到C或C++中?
err*_*per 14
您应首先考虑将您的应用程序实现为Node的C++模块,然后将主要部分粘贴为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();
});
Run Code Online (Sandbox Code Playgroud)
您可以使用JSlint作为解析器,然后使用grep进行危险调用,然后eval(conf_script)使用require(config.js),但您需要添加exports.someMethod = function (...) {...}.但require()在一般更安全,但您可能希望实现预处理器为你的配置将替代exports.someMethod = function (...) {...}的,而不是你的职责,并会追加require('OnlyCallMySafeMethods')而拒绝任何企图require('fs')或其他的lib,你可能会害怕让别人使用.这种安全性只是您可能希望拥有的一种选择,这完全取决于您.虽然我想你可能想要用exports.someMethod = ....替换做一点,然后require('myAppConfigLib)在顶部添加一个,这样用户就可以使用API加上他们可能希望放入脚本/配置的任何内容!
更新:有一个非常有用的注释第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.
Run Code Online (Sandbox Code Playgroud)
另请注意,src/在构建时将内容编译为字节码.
| 归档时间: |
|
| 查看次数: |
19101 次 |
| 最近记录: |