为了举个例子,这里有一些人为的设计:
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 类原型?
答案 0 :(得分:1)
require
缓存代码,因此当重复调用它时,它不会再次重新加载它。由于Me
对象仍在内存中,因此当您再次require
时,它不会重新加载。
如果要执行此操作,则必须从模块缓存中删除Me
。
答案 1 :(得分:1)
来自Nodejs文档,LINK
模块在第一次加载后进行缓存。这意味着 (除此之外)每个要求的呼叫(' foo')都会得到 返回完全相同的对象,如果它将解析为相同 文件。
多次调用require(' foo')可能不会导致模块代码 多次执行。这是一个重要的特征。用它, "部分完成"可以返回对象,从而允许传递 即使它们会导致循环,也要加载依赖项。
如果您想让模块多次执行代码,那么导出 一个函数,并调用该函数。