编译V8没有网络等

Nmd*_*ery 5 javascript c++ v8

我想将V8嵌入到我正在开发的项目中.该项目根本不使用网络 - 实际上它出于安全原因避免了网络连接(我不想打开我不准备的跨站点脚本的潘多拉盒子).无论如何,我只想要javascript.

据我所知,V8只是一个简单的javascript编译器和VM,这很好 - 但它需要与各种第三方库一起编译才能适应增加的功能.我想,网络就是其中之一.为了能够构建使用V8的应用程序,您必须与Winsock链接.

我希望能够从引擎中删除这些额外的库,并从头开始添加绑定到我自己的内部代码(除了字符串和类似的东西),但我找不到帮助我做的指南或文档这个.V8在我应该知道的javascript引擎之上添加了什么功能,我该如何删除它?

编辑:我也注意到包含了URI,这对我正在做的事情并不是特别有用.URI函数没有优化,因为可执行文件中嵌入了标准的排序库,我也想删除它们(以及任何其他XML/Http相关的javascript函数).

ief*_*rge 6

网络.目前V8需要为其调试器代理建立网络,没有它就可以使用引擎,但是您需要修改源代码.

  1. src/platform/socket.h

    用你的操作系统替换NativeHandle typedef(比如V8_OS_WIN):

    typedef int NativeHandle;
    
    Run Code Online (Sandbox Code Playgroud)

    kInvalidNativeHandle用-1 替换const值.

    删除OS包含文件.

  2. 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,没有网络/文件系统等.如果我忘记了其他依赖项或者您有任何疑问,请告诉我.