2009-07-19 10 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が更新されたようです。 'Set'の呼び出しでFunctiontemplate - > GetFunction()アクセサが必要になりました。 FunctionTemplate :: New(Include) - > GetFunction() –

+0

今日の最新v8(12月17,2013)では、v8 :: Argumentは存在しなくなりました(v8 :: internal :: Argument thou)。関数の宣言のv8 :: Argument&は、v8 :: FunctionCallbackInfo &に変更する必要があります。 – yoshi

3

Node.jsまたはCommonsJS準拠のランタイムを使用している場合は、require(module)を使用できます。 それについて素敵な記事がありますhttp://jherdman.ca/2010-04-05/understanding-nodejs-require/

+0

このリンクは現在破損しています –

+0

@JessBowers link fixed。 – Petah

+0

そのリンクは再び切断されます。私は速いgoogleをして、タイトルと推測された著者に基づいてそれを見つけることができませんでした。 – xaxxon

関連する問題