Nodejsダイナミックロードrequire

3469 ワード

nodejsのrequireはキャッシュに保存されています.つまり、requireは一回後に再度require値は変わりません.
例えば:
a.js
1 var a = 12;
2 exports.a = a;
test.js
1 var aa = require('./a.js');
2 console.log(aa)
3 aa.a = 15;
4 //      15
5 var bb = require('./a.js');
6 console.log(bb);
実行 node test.jsが結果を得る
{ a: 12 }
{ a: 15 }
 
再requireの内容を元の12にしたいなら、requrieのcacheを削除すればいいです.
test.jsは
 1 var aa = require('./a.js');
 2 console.log(aa)
 3 aa.a = 15;
 4 //      15
 5 var bb = require('./a.js');
 6 console.log(bb);
 7 
 8 var path = require('path');
 9 var pwd = path.resolve();
10 pwd += '/a.js';
11 //console.log(pwd);
12 delete require.cache[pwd];
13 
14 
15 //          
16 var cc = require('./a.js');
17 console.log(cc);
希望の結果が得られます.
{ a: 12 }
{ a: 15 }
{ a: 12 }