Javascript 如何在today';中包含另一个js文件;s v8?

Javascript 如何在today';中包含另一个js文件;s v8?,javascript,v8,Javascript,V8,我找到了一个旧的anwser和更高版本的更新,但是我很难将这段代码调整到最新(2020)的V8版本 我遇到了很多困难: String::New被删除,现在一个String::NewFromUtf8Literal需要一个隔离*隔离,我不知道如何传递到函数Include,我是否应该在常量参数和参数之前添加这个 Script::Compile现在将上下文对象作为参数 我不知道最后两行代码放在哪里 Handle<ObjectTemplate> global = ObjectTemplate:

我找到了一个旧的anwser和更高版本的更新,但是我很难将这段代码调整到最新(2020)的V8版本

我遇到了很多困难:

  • String::New
    被删除,现在一个
    String::NewFromUtf8Literal
    需要一个
    隔离*隔离
    ,我不知道如何传递到函数
    Include
    ,我是否应该在
    常量参数和参数之前添加这个
  • Script::Compile
    现在将
    上下文
    对象作为参数
  • 我不知道最后两行代码放在哪里
    Handle<ObjectTemplate> global = ObjectTemplate::New();
    global->Set(String::New("include"), FunctionTemplate::New(Include));
    
  • 这里的
    String::NewFromUtf8Literal
    有一些错误

    samples/import.cc:34:110: Error:‘static v8::Local<v8::String> v8::String::NewFromUtf8Literal(v8::Isolate*, const char*, v8::NewStringType, int)’ is private within this context
       34 |   Handle<String> source = String::NewFromUtf8Literal(args.GetIsolate(), buff, v8::NewStringType::kNormal, len);
          |   
    
    samples/import.cc:34:110:Error:“static v8::Local v8::String::NewFromUtf8Literal(v8::Isolate*,const char*,v8::NewStringType,int)”在此上下文中是私有的
    34 | Handle source=String::NewFromUtf8Literal(args.getisolation(),buff,v8::NewStringType::kNormal,len);
    |   
    
  • 我不知道如何传递到函数Include,我应该在
    const Arguments&args
    之前添加它吗

    不,您不能修改将从JS调用的函数的签名,但您不需要:
    FunctionCallbackInfo
    (它是
    参数的替代物)有一个
    GetIsolate()
    方法

    Script::Compile
    现在将
    上下文
    对象作为参数

    既然你对此有疑问,我猜你只是在使用一个单一的上下文。只要将它存储在一个
    v8::Persistent
    中,并在需要时从它创建一个
    v8::Local
    。(目前,您还可以使用不推荐使用的
    隔离::GetCurrentContext()
    ,但对于新编写的代码,我建议您不要这样做,因为在将来必须迁移时,您只会为自己创建更多的工作。)

    我不知道最后两行代码放在哪里

    Handle<ObjectTemplate> global = ObjectTemplate::New();
    global->Set(String::New("include"), FunctionTemplate::New(Include));
    
    无论您在哪里设置全局对象,都在应用程序启动序列的某个位置

    所有这些问题(以及更多问题)都可以通过研究V8项目维护的“shell”示例应用程序来回答:。
    特别是,它的
    Load
    函数可以实现您想要的功能。

    Hi@jmrk,我又试了一次,现在我还有两个错误。你能看到我的更新吗?(1)
    全局上下文。重置(隔离、本地上下文)
    应该可以工作。(2) 使用公共版本的
    NewFromUtf8Literal
    ,它只有3个参数。