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

Node.js中require读取JSON文件更新后无法获取新内容的问题

为什么require读取JSON更新后不生效?怎么解决?

嘿,这个问题我之前也碰到过!其实核心原因是Node.js的require自带缓存机制:当你第一次用require()加载JSON文件时,Node会把解析后的对象存在内存缓存里,后续再调用require()同一个文件,它直接从内存拿缓存的旧数据,根本不会去磁盘上读取更新后的文件内容。

那怎么解决呢?给你两个实用的办法:

办法一:手动清除require缓存后重新加载

每次读取前先把对应文件的缓存删掉,这样require()就会重新去磁盘读取最新内容。代码示例:

var file = process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'] + "\\AppData\\Roaming\\BetterDiscord\\plugins\\Test.json"; 

// 关键:清除该文件的require缓存
delete require.cache[require.resolve(file)];
// 重新加载文件
var json = require(file); 

console.log(JSON.stringify(json.img)); 
json.img.push({name:"Test"});

// 保存文件后,如果需要再次读取,记得重复清除缓存+require的步骤

办法二:用fs模块直接读写文件(更推荐动态场景)

绕开require的缓存,直接用Node的fs模块读取文件内容,再手动解析成JSON对象。这样每次都会从磁盘获取最新数据,适合需要频繁修改和读取JSON的场景。

同步版本(简单直接,适合小文件)

const fs = require('fs');
var file = process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'] + "\\AppData\\Roaming\\BetterDiscord\\plugins\\Test.json"; 

// 读取文件并解析JSON
const jsonContent = fs.readFileSync(file, 'utf8');
var json = JSON.parse(jsonContent);

console.log(JSON.stringify(json.img)); 
json.img.push({name:"Test"});

// 保存更新后的JSON到文件(null和2是为了格式化输出,让文件更易读)
fs.writeFileSync(file, JSON.stringify(json, null, 2));

异步版本(非阻塞,适合大文件或高并发场景)

const fs = require('fs');
var file = process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'] + "\\AppData\\Roaming\\BetterDiscord\\plugins\\Test.json"; 

fs.readFile(file, 'utf8', (err, data) => {
  if (err) throw err;
  var json = JSON.parse(data);
  
  json.img.push({name:"Test"});
  
  fs.writeFile(file, JSON.stringify(json, null, 2), (err) => {
    if (err) throw err;
    console.log("文件已更新");
  });
});

如果你的场景是需要频繁修改和读取这个JSON文件,更推荐用fs模块的方式——毕竟require的缓存设计是为了提升模块加载性能,不是用来处理动态更新的配置文件哒~

内容的提问来源于stack exchange,提问作者Letsplaybar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:41:22