我有类似
的东西var some_data=require('../objects/some_data.json');
function(){
//something here to change data of some_data.json - fs.write
//vl this affect value of some_data at this point ?
}
是否需要保持对文件的有效引用,或者在需要时只读取一次?
如果它保持活动参考,我如何保留some_data的旧值
答案 0 :(得分:2)
它加载文件,它是如何开始的。它不会对json文件进行任何更改。
例如,运行此
var b = require("./a.json");
for (var i = 0; i< 1000000; i++) {
console.log(b.a);
}
用这个json a.json
{
"a": "b"
}
在循环中更改值 - 或删除文件。它仍然有效。
答案 1 :(得分:0)
它保持活跃的参考。即,通过require加载的对象是单例。
来自https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders:
模块在第一次加载后进行缓存。
多次调用require(&#39; foo&#39;)可能不会导致模块代码多次执行。
假设您有一个名为deleteme.json
的文件,其中包含以下内容:
{
"key": "value"
}
让我们尝试它,改变它,然后再次要求它:
var data = require('./deleteme.json')
data.key = "newvalue"
data = require('./deleteme.json')
console.log(data)
您会看到它记录newvalue
- 因为对象没有重新加载,原始文件会留在内存中。
由于您询问有关删除文件的问题:您可以删除该文件,因为它在内存中。删除文件只会在您再次启动节点并首次加载模块时停止。