2009-07-19 8 views

Odpowiedz

22

Trzeba dodać tę funkcję ręcznie, oto jak to zrobiłem:

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)); 

Zasadniczo dodaje globalnie dostępnej funkcji, które można załadować i uruchomić plik javascript w obecnym kontekście. Używam go z moim projektem, działa jak marzenie.

// beginning of main javascript file 
include("otherlib.js"); 
+0

Dziękuję bardzo :) –

+0

Wygląda na to, że V8 został zaktualizowany od czasu opublikowania tej odpowiedzi. Potrzebujesz teraz funkcji Functiontemplate's -> GetFunction() w wywołaniu funkcji "Ustaw": np. FunctionTemplate :: New (Dołącz) -> GetFunction() –

+0

Z najnowszą wersją v8 od dzisiaj (Dec 17,2013), v8 :: Argument już nie istnieje (ma v8 :: internal :: Argument ty). Tak więc v8 :: Argument & w deklaracji arg funkcji musi zostać zmieniona na v8 :: FunctionCallbackInfo &. – yoshi

3

Jeśli używasz Node.js lub dowolnego środowiska wykonawczego zgodnego z CommonsJS, możesz użyć require (module); Jest fajny artykuł na ten temat pod adresem http://jherdman.ca/2010-04-05/understanding-nodejs-require/

+0

ten link jest teraz uszkodzony –

+0

Naprawiono link @JessBowers. – Petah

+0

ten link jest zepsuty ponownie. Zrobiłem szybki google i nie mogłem go znaleźć na podstawie tytułu i przypuszczalnego autora. – xaxxon

Powiązane problemy