2009-07-19 6 views

Répondre

22

Vous devez ajouter cette fonctionnalité manuellement, voici comment je l'ai fait:

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

Il ajoute essentiellement une fonction globalement accessible qui peut charger et exécuter un fichier javascript dans le contexte actuel. Je l'utilise avec mon projet, fonctionne comme un rêve.

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

Merci beaucoup :) –

+0

On dirait que V8 a été mis à jour depuis que cette réponse a été postée. Vous avez maintenant besoin de l'accesseur Functiontemplate -> GetFunction() dans l'appel de 'Set': par ex. FunctionTemplate :: New (Include) -> GetFunction() –

+0

Avec le dernier v8 d'aujourd'hui (Dec 17,2013), v8 :: Argument n'existe plus (a v8 :: internal :: Argument tu). Donc, l'argument v8 :: Argument & dans la déclaration d'argument de la fonction doit être changé en v8 :: FunctionCallbackInfo &. – yoshi

3

Si vous utilisez Node.js ou tout CommonsJS exécution conforme, vous pouvez utiliser require (module); Il ya un bon article à ce sujet au http://jherdman.ca/2010-04-05/understanding-nodejs-require/

+0

ce lien est maintenant rompu –

+0

Lien @JessBowers corrigé. – Petah

+0

ce lien est à nouveau rompu. J'ai fait un google rapide et je n'ai pas pu le trouver sur la base du titre et de l'auteur présumé. – xaxxon

Questions connexes