오늘의 v8에 다른 js 파일 파일을 어떻게 포함시킬 수 있습니까?
여기 에서 오래된 anwser 및 최신 업데이트를 찾았 지만이 코드를 최신 (2020) V8 버전에 적용하기가 어렵습니다.
내가 직면하는 많은 어려움이 있습니다.
String::New
제거되고 기능에 전달하는 방법을 모르는 지금이String::NewFromUtf8Literal
필요합니다. 전에 이것을 추가해야 합니까?Isolate* isolate
Include
const Arguments& args
Script::Compile
소요Context
지금 paramater으로 객체를- 그리고 마지막 두 줄 코드를 어디에 넣을지 모르겠어요
Handle<ObjectTemplate> global = ObjectTemplate::New(); global->Set(String::New("include"), FunctionTemplate::New(Include));
-업데이트-
몇 일 후, 나는 등 내 코드가 이 .
그러나 오류로 인해 여전히 컴파일되지 않습니다.
Local
에서 얻을 수없는 것 같습니다Persistent
. 심지어 나는 danijar의 전략 을 사용 했습니다 . 생성자를 사용하지 않았기 때문일 수 있지만이 함수 범위 내에서 Persist를 만들 수 없다고 생각합니다.samples/import.cc:74:103: Error:cannot convert ‘v8::Local<v8::Context>’ to ‘v8::Context*’ 74 | global_context = v8::Persistent<v8::Context, CopyablePersistentTraits<v8::Context>>::New(isolate, local_context); | ^~~~~~~~~~~~~ | | | v8::Local<v8::Context>
여기에 약간의 오차가
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); |
답변
Include 함수로 전달하는 방법을 모르겠습니다. 이전에 이것을 추가해야
const Arguments& args
합니까?
아니요, JS에서 호출 할 함수의 서명을 수정할 수는 없지만 다음 작업을 수행 할 필요는 없습니다. FunctionCallbackInfo
(를 대체하는 Arguments
) GetIsolate()
메서드가 있습니다.
Script::Compile
소요Context
지금은 매개 변수로 객체를
이것에 대해 질문이 있기 때문에 모든 것에 대해 하나의 컨텍스트 만 사용하고 있다고 생각합니다. 에 저장하고 필요할 때마다 v8::Persistent
생성 v8::Local
하십시오. (당분간은 deprecated를 사용할 수도 Isolate::GetCurrentContext()
있지만 새로 작성된 코드의 경우 나중에 마이그레이션해야 할 때만 더 많은 작업을 생성 할 수 있으므로 이에 대해 권장하지 않습니다 .)
마지막 두 줄 코드를 어디에 넣을지 모르겠습니다.
전역 개체를 설정할 때마다 앱의 시작 순서 어딘가에 있습니다.
V8 프로젝트에서 유지 관리하는 "셸"샘플 앱을 연구하면 이러한 모든 질문 (및 그 이상)에 대한 답을 얻을 수 있습니다. https://chromium.googlesource.com/v8/v8/+/master/samples/shell.cc. 특히, 그 Load
기능은 당신이 원하는 것을 거의 수행합니다.