我想将V8嵌入到我正在开发的项目中。该项目根本不使用网络 - 实际上它出于安全原因避免了网络连接(我不想打开我不准备的跨站点脚本的潘多拉盒子)。无论如何,我只想要javascript。
据我所知,V8只是一个简单的javascript编译器和VM,这很好 - 但它需要与各种第三方库一起编译才能适应增加的功能。我想,网络就是其中之一。为了能够构建使用V8的应用程序,您必须与Winsock链接。
我希望能够从引擎中删除这些额外的库,并从头开始向我自己的内部代码添加绑定(除了字符串和类似的东西),但是我找不到指南或文档的那些帮我做到这一点。 V8在我应该知道的javascript引擎之上添加了什么功能,我该如何删除它?
编辑:我也注意到包含了URI,这对我正在做的事情并不特别有用。 URI函数没有进行优化,因为可执行文件中嵌入了标准的排序库,我也想删除它们(以及任何其他与XML / Http相关的javascript函数)。答案 0 :(得分:6)
<强>网络即可。目前V8需要为其调试器代理建立网络,没有它就可以使用引擎,但是你需要修改源代码。
src/platform/socket.h
用您的操作系统替换NativeHandle typedef(如V8_OS_WIN
):
typedef int NativeHandle;
将kInvalidNativeHandle
const值替换为-1。
删除操作系统包含文件。
src/platform/socket.cc
用存根替换所有Socket
类方法的主体,例如:
bool Socket::Bind(int port) {
assert(!"Socket usage.");
return true;
}
bool Socket::Listen(int backlog) {
assert(!"Socket usage.");
return true;
}
...
从此文件中删除其他特定于操作系统的功能
这应该删除所有V8网络依赖项。
XML / HTTP功能。。 V8不包括那些。它们通常由嵌入器实现。
URI函数我不建议删除它们以及任何其他JavaScript内置函数。这可能会打破引擎。无论如何它们都是安全的。
<强> ICU 即可。您可以使用构建选项i18nsupport=off
构建没有ICU库的V8。
在这种情况下,您需要初始化内置ICU:
v8::V8::InitializeICU();
希望这会有所帮助。我自己在非常有限的环境中使用V8,没有网络/文件系统等。如果我忘记了其他依赖项或者您有任何疑问,请告诉我。