Как включить другой файл сценария в файл сценария .js в v8?
В коде есть < скрипт >, но как это сделать в встроенной программе v8?Как включить другой файл js в Google v8?
12
A
ответ
22
Вы должны добавить эту функцию вручную, вот как я это сделал:
Handle<Value> Include(const Arguments& args) {
for (int i = 0; i < args.Length(); i++) {
String::Utf8Value str(args[i]);
// load_file loads the file with this name into a string,
// I imagine you can write a function to do this :)
std::string js_file = load_file(*str);
if(js_file.length() > 0) {
Handle<String> source = String::New(js_file.c_str());
Handle<Script> script = Script::Compile(source);
return script->Run();
}
}
return Undefined();
}
Handle<ObjectTemplate> global = ObjectTemplate::New();
global->Set(String::New("include"), FunctionTemplate::New(Include));
Это в основном добавляет глобально доступную функцию, которая может загрузить и запустить файл JavaScript в текущем контексте. Я использую его с моим проектом, работает как сон.
// beginning of main javascript file
include("otherlib.js");
3
Если вы используете Node.js или любой CommonsJS совместимых сред выполнения, вы можете использовать требуется (модуль); Об этом есть хорошая статья об http://jherdman.ca/2010-04-05/understanding-nodejs-require/
Большое спасибо :) –
Похож, что V8 был обновлен с момента опубликования этого ответа. Теперь вам нужно использовать функцию Functiontemplate -> GetFunction() в вызове «Установить»: например. FunctionTemplate :: New (Include) -> GetFunction() –
С последним v8 на сегодняшний день (декабрь 17,2013), v8 :: Аргумент больше не существует (имеет v8 :: internal :: Argument you). Таким образом, v8 :: Аргумент & в объявлении arg функции должен быть изменен на v8 :: FunctionCallbackInfo &. –
yoshi