2017-07-27 14 views
0

変更の対象となる外部ファイルからNode関数を実行する方法があるかどうかを知りたい。動的外部ファイルからNodejs関数を実行する

Main.js

function read_external(){ 
    var external = require('./external.js'); 
    var result = external.result(); 
    console.log(result); 
} 

setInterval(function(){ 
    read_external(); 
},3000); 

External.js(初期)

exports.result = function(){ 
    return "James"; // Case 1 
} 

コードが実行を開始した後、私は今、ノードmain.jsを

を入力してコードを実行し、Iを変更External.js〜

exports.result = function(){ 
    return "Jack"; // Case 2 
} 

しかし、変化のインスピレーション、それはジャックではなく、ジェームズを印刷し続けます。 コードが変更されたときに新しい関数が実行されるようなコードを書く方法はありますか?

私は、JSファイルとして独自のスクリプトを提供できるサービスを構築しており、誰が呼び出しているかによってサービス内の特定の機能を呼び出すときに実行されるサービスです。

+1

delete require.cache [require.resolve( './ external.js')]はあなたの解決策ですか?ちょうどテストとして、答えとして私のコメントを追加しました。 –

答えて

1

各呼び出しの前にキャッシュからモジュールを削除できます。

var module = require.resolve('./external.js'); 

function read_external(){ 
    var external = require(module); 
    var result = external.result(); 
    console.log(result); 
} 

setInterval(function(){ 
    delete require.cache[module]; //clear cache 
    read_external(); 
},3000); 
+0

Ahmet CanGüven - これは完璧に動作します!ありがとう:) –

+0

@dontknow You'r welcome :)ちょっとリファクタリングをしました。最新バージョンを使用してください。 –

1

Node.jsは同じファイルへの呼び出しをキャッシュするため、再度フェッチする必要はありません。新しいファイルであるかのようにファイルを取得するには、require.cacheのキャッシュをクリアする必要があります。ファイルのキーは、参照できる解決済みの名前にする必要があります。require.resolve()

関連する問題