2009-07-19 7 views

risposta

22

si deve aggiungere questa funzionalità manualmente, ecco come ho fatto:

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

Si aggiunge fondamentalmente una funzione globalmente accessibile che può caricare ed eseguire un file JavaScript all'interno del contesto attuale. Lo uso con il mio progetto, funziona come un sogno.

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

Grazie mille :) –

+0

Sembra che V8 sia stato aggiornato da quando è stata pubblicata questa risposta. Ora hai bisogno dell'accessorio Functiontemplate -> GetFunction() nella chiamata a 'Set': ad es. FunctionTemplate :: New (Include) -> GetFunction() –

+0

Con l'ultima v8 di oggi (dic 17,2013), v8 :: Argument non esiste più (ha v8 :: internal :: Argument thou). Quindi v8 :: Argument & nella dichiarazione di funzione deve essere cambiato in v8 :: FunctionCallbackInfo &. – yoshi

3

Se stai usando Node.js o qualsiasi CommonsJS runtime compatibile, è possibile utilizzare require (modulo); C'è un bell'articolo a proposito di http://jherdman.ca/2010-04-05/understanding-nodejs-require/

+0

il link è ora rotto –

+0

@JessBowers collegamento corretto. – Petah

+0

il collegamento è stato interrotto di nuovo. Ho fatto un rapido google e non sono riuscito a trovarlo in base al titolo e all'autore presunto. – xaxxon

Problemi correlati