2016-02-27 25 views
2

舉一個例子的緣故,這裏的東西做作:我如何使用重置類原型`requires`

var util = require('util'); 
var Me = require('./me.js'); 

console.log(util.inspect(Me.prototype.something.toString())); // #1  

Me.prototype.name = function() { 
    console.log('different'); 
}; 

console.log(util.inspect(Me.prototype.something.toString())); // #2 

// re-init prototype 
var Me = require('./me.js'); 
console.log(util.inspect(Me.prototype.something.toString())); // #3 

輸出:

'function() {\n console.log(\'original\');\n}' 
'function() {\n console.log(\'different\');\n}' 
'function() {\n console.log(\'different\');\n}' 

爲什麼沒有require呼叫重新初始化Me class prototype?

+1

可能有幫助:http://stackoverflow.com/q/15666144/1169798 – Sirko

+1

也有幫助http://stackoverflow.com/questions/42376161/is-it-possible-to-re-require-a-文件到獲得,不同範圍的/ 42377173#42377173 – lonewarrior556

回答

1

從文件的NodeJS,LINK

模塊是他們第一次加載後緩存。這意味着 (其中包括)每次調用require('foo')將返回完全相同的對象 (如果它將解析爲相同的 文件)。

多次調用require('foo')可能不會導致多次執行模塊代碼爲 。這是一個重要的功能。通過它,可以返回 「部分完成」的對象,從而允許即使在它們會導致循環時也加載依附關係。

如果您想讓模塊多次執行代碼,然後導出 函數,並調用該函數。

1

require緩存代碼,因此當重新調用時它不會重新加載它。由於Me對象仍在內存中,所以當您再次使用require時,它不會重新加載。

如果你想這樣做,你必須從模塊緩存中刪除Me

看到這個答案How to remove module after "require" in node.js?

相關問題