You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Node.js中修改require引入的数组后原文件未同步更新?

为什么修改require导入的数组后,原文件内容没有变化?

问题场景

我有两个文件:
data.js:

var idToExport = ["123", "456"]
module.exports = idToExport;

app.js:

var data = require("./data.js")
data.push("789");
console.log(data[2]) // 输出789

运行app.js后能正常输出789,但打开data.js文件一看,里面还是原来的["123", "456"],添加的789根本没保存下来,这是为啥?


问题原因

咱们得先搞清楚Node.js加载模块的底层逻辑:

  • 当你调用require("./data.js")时,Node.js会读取磁盘上的data.js文件内容,执行里面的代码,然后把module.exports指向的结果加载到内存中并缓存起来。后续再require这个模块,直接用内存里的缓存,不会再重新读磁盘文件。
  • 你在app.js里做的data.push("789"),只是修改了内存中那个数组对象的内容,完全没涉及到磁盘上的原文件。Node.js不会自动把内存里的变量变化同步回磁盘文件——这不是它的默认行为。

如果要把修改保存到文件怎么办?

如果想让修改持久化到data.js,你得手动用Node.js的文件系统模块(fs)来写入文件。比如在app.js里加一段代码:

var fs = require('fs');
var data = require("./data.js")
data.push("789");
// 把数组转换成符合文件格式的字符串,再写入文件
fs.writeFileSync('./data.js', `var idToExport = ${JSON.stringify(data)}; module.exports = idToExport;`);
console.log(data[2]) // 输出789

这样运行后,再打开data.js就能看到更新后的数组了。


内容的提问来源于stack exchange,提问作者métier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:43:51