gpt4 book ai didi

javascript - 在没有网络的情况下编译 V8 等

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:45 25 4
gpt4 key购买 nike

我想将 V8 嵌入到我正在处理的项目中。这个项目根本不使用网络——事实上它出于安全原因避免了网络(我不想打开一个我没有准备好的跨站点脚本潘多拉魔盒)。无论如何,我只想要 javascript。

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

我希望能够从引擎中剥离这些额外的库,并从头开始将绑定(bind)添加到我自己的内部代码中(除了字符串和类似的东西),但我找不到指南或一些文档可以帮助我做到这一点。作为我应该了解的 JavaScript 引擎,V8 添加了哪些功能?我该如何删除它?

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

最佳答案

网络。目前V8的debugger agent需要联网,没有它也可以使用engine,但是需要修改源码。

  1. src/platform/socket.h

    将您的操作系统(如 V8_OS_WIN)的 NativeHandle typedef 替换为:

    typedef int NativeHandle;

    kInvalidNativeHandle 常量值替换为 -1。

    删除操作系统包含文件。

  2. src/platform/socket.cc

    用 stub 替换所有 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 内置函数。这可能会损坏引擎。而且它们无论如何都可以安全使用。

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

   v8::V8::InitializeICU();

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

关于javascript - 在没有网络的情况下编译 V8 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22165593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com