Javascript 在没有联网的情况下编译V8等

Javascript 在没有联网的情况下编译V8等,javascript,c++,v8,Javascript,C++,V8,我想将V8嵌入到我正在进行的项目中。这个项目根本不使用网络——事实上,出于安全原因,它避免了网络连接(我不想打开一个我没有准备好的跨站点脚本潘多拉盒子)。不管怎样,我只想要javascript 据我所知,V8只是一个简单的javascript编译器和VM,这很好——但它需要使用各种第三方库进行编译,才能适应添加的功能。我想,网络就是其中之一。为了能够构建使用V8的应用程序,您必须链接到Winsock 我希望能够从引擎中剥离这些额外的库,并从头开始向我自己的内部代码添加绑定(除了字符串之类的东西)

我想将V8嵌入到我正在进行的项目中。这个项目根本不使用网络——事实上,出于安全原因,它避免了网络连接(我不想打开一个我没有准备好的跨站点脚本潘多拉盒子)。不管怎样,我只想要javascript

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

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


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

网络。目前,V8需要为其调试器代理建立网络,可以在不使用它的情况下使用引擎,但您需要修改源代码

  • src/platform/socket.h

    将操作系统的NativeHandle typedef(如
    V8\u OS\u WIN
    )替换为:

    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内置函数。这可能会损坏发动机。无论如何,它们都是安全的

    重症监护病房。您可以使用build选项
    i18nsupport=off
    构建不带ICU库的V8。 在这种情况下,您需要初始化内置ICU:

       v8::V8::InitializeICU();
    

    希望这有帮助。我自己在非常受限的环境中使用V8,没有网络/文件系统等。如果我忘记了其他依赖项,或者您有任何问题,请告诉我。

    那么,您会问在这种情况下“etc”是什么?这是你的问题吗?@KarolyHorvath整个问题都在最后一句话里。特别是“我如何删除它?”查看当前的选项,它似乎不是一个选项,当然也没有经过测试。当然,你可以自己进行回购交易。@nmd系统我不确定你是否可以;首先,如果没有URI支持,“require”将如何工作?
       v8::V8::InitializeICU();