app.js
var temp = require('./data');
temp.setId(1);
temp.setName('Tushar', 'Mudgal');
temp.setCity('New Delhi');
temp.setPh(9999421591);
var temp2 = require('./data');
// temp2.setId(2);
// temp2.setName('Saurabh', 'Mudgal');
// temp2.setCity('New Delhi');
// temp2.setPh(9999425085);
console.log(temp.getInfo());
console.log(temp2.getInfo());
当我通过node
执行上面的脚本时,我收到了这个输出:
tourist@linux:~/Desktop/backend/modules2/customer$ node app.js
{ name: 'Tushar Mudgal',
cid: 1,
ad_city: 'New Delhi',
phno: 9999421591 }
{ name: 'Tushar Mudgal',
cid: 1,
ad_city: 'New Delhi',
phno: 9999421591 }
我想知道为什么temp2
包含与temp
相同的数据。
data
文件夹由index.js
文件组成,其中包含app.js
文件中执行的所有函数的定义。
答案 0 :(得分:2)
Node.js缓存模块,因此require(...)不与readFile(...)相同:一旦Node加载到模块中,它就会缓存模块export,simple简单地指回任何后续require(...)调用同一个东西。
所以:
// load module into cache and return its exports.
// the variable temp is an _alias_ for these exports.
var temp = require('./data');
// modify temp, and because it's just an alias, that means
// modify the data.js exports that you told Node to require in.
modify(temp);
// set up a new alias for the data.js module. Node
// points you to its cache, so any changes you made earlier
// are still in effect.
var temp2 = require('./data');
底线:如果您需要加载文件数据,请不要使用require
。只有在需要加载真实模块时才使用它。