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