#!/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 (...) {...}。但是,您可能希望实现一个预先处理器,它将替换exports.someMethod = function (...) {...}而不是函数,并将附加require('OnlyCallMySafeMethods')并拒绝对require('fs')或其他库的任何尝试你可能害怕让别人使用。这种安全性只是你 * 可能希望拥有 * 的一个可选的东西,这完全取决于你。虽然我想你可能想用exports.someMethod = ....替换,并在顶部添加一个require('myAppConfigLib),这样用户就可以使用你的API加上任何他们可能希望放在他们的脚本/配置!
***UPDATE:***在src/node.js的第66行有一个非常有用的注解:
// 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.
7条答案
按热度按时间kognpnkq1#
您应该首先考虑是否 * 足以将应用程序实现为Node的C++模块 *,然后 * 将主要部分粘合为Node脚本 *。
否则,您可能希望“重新实现Node”,方法是以核心代码为例,删除不需要的部分(例如HTTP模块),然后把你的组件放进去。最不痛苦的方法是做一个子树合并,然后剥离构建系统,然后在生成脚本中添加前缀以指向它所在的目录。然后,您可以停止生成某些部分。但是,节点“的构建系统包含几个部分,这可能是一项相当困难的工作。
你也可以尝试用默认加载的东西重新打包Node,并更改可执行文件的名称。然而,这只是采用我所描述的第一种方法的一种更复杂的方法,你可以只在
/usr/bin/
中安装一个脚本,它将如下所示:您可以使用JSlint作为解析器,然后使用grep作为危险调用,然后使用
eval(conf_script)
,或者只使用require(config.js)
,尽管您需要添加exports.someMethod = function (...) {...}
。但是,您可能希望实现一个预先处理器,它将替换exports.someMethod = function (...) {...}
而不是函数,并将附加require('OnlyCallMySafeMethods')
并拒绝对require('fs')
或其他库的任何尝试你可能害怕让别人使用。这种安全性只是你 * 可能希望拥有 * 的一个可选的东西,这完全取决于你。虽然我想你可能想用exports.someMethod = ....
替换,并在顶部添加一个require('myAppConfigLib)
,这样用户就可以使用你的API加上任何他们可能希望放在他们的脚本/配置!***UPDATE:***在
src/node.js
的第66行有一个非常有用的注解:还请注意,
src/
的内容在构建时被编译为字节码。wpcxdonn2#
嵌入Node.JS现在被Node.JS分支JXcore正式支持。嵌入文档可以从this link获得。
vmjh9lq93#
我已经建立了一些东西接近我认为你在寻找:
https://github.com/ZECTBynmo/tacnode
这是一个允许node.js静态链接到C++应用程序的库,它肯定不是很完善,但我已经用它来启动简单的节点脚本。
vuktfyat4#
官方文档中有一页解释了how to embed Node.js into C++是如何工作的。这是从Node 12.x开始就有的。
有一个full example in the Node repo。为方便起见,复制如下:
vawmfj5a5#
有可能,V8是用C编写的,node.js可以在V8上运行,但是除非你有一个非常好的理由为什么你要通过C运行javascript,否则你可能会更好地找到一个合适的C库,并直接在C中实现所需的功能。集成脚本语言和本地代码的任务通常不是微不足道的。例如V8 documentation。Qt在c++和javascript之间提供了一个相当不错的集成,而且在脚本和代码之间来回移动对象也不是件小事。
xyhw6mcr6#
我刚刚检查了js-git,它是为Node.js制作的,也依赖于其他一些Node.js模块。
但是,同一个开发人员编写了一个工具tim-task,用来 Package 一些常见的Node.js函数,最重要的是
require
,并将一些Node.js模块打包在一起,使其不再依赖Node.js。例如,js-git被打包成一个JS文件,可以在浏览器中使用。打包后的文件看起来像this。这可能也可以在纯V8中使用。这可能对您有用。但是请注意,这种方法将受到限制。
8yoxcaq77#
嵌入节点有很多很好的理由,包括利用NPM的能力。
不幸的是JXCore正在消亡。这篇文章给出了一些替代方案。http://www.goland.org/nodeapps/