2009-07-19 2 views

ответ

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"); 
+0

Большое спасибо :) –

+0

Похож, что V8 был обновлен с момента опубликования этого ответа. Теперь вам нужно использовать функцию Functiontemplate -> GetFunction() в вызове «Установить»: например. FunctionTemplate :: New (Include) -> GetFunction() –

+0

С последним v8 на сегодняшний день (декабрь 17,2013), v8 :: Аргумент больше не существует (имеет v8 :: internal :: Argument you). Таким образом, v8 :: Аргумент & в объявлении arg функции должен быть изменен на v8 :: FunctionCallbackInfo &. – yoshi

3

Если вы используете Node.js или любой CommonsJS совместимых сред выполнения, вы можете использовать требуется (модуль); Об этом есть хорошая статья об http://jherdman.ca/2010-04-05/understanding-nodejs-require/

+0

Эта ссылка сейчас была повреждена –

+0

@JessBowers ссылка исправлена. – Petah

+0

, эта ссылка снова повреждена. Я сделал быстрый google и не смог найти его на основе названия и предполагаемого автора. – xaxxon