在节点js中是否需要在运行时更新值?

时间:2016-08-22 18:05:04

标签: javascript node.js require

我有类似

的东西
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的旧值

2 个答案:

答案 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 - 因为对象没有重新加载,原始文件会留在内存中。

由于您询问有关删除文件的问题:您可以删除该文件,因为它在内存中。删除文件只会在您再次启动节点并首次加载模块时停止。