Node.js中require JSON文件后无法读取更新值的技术问询
Node.js读取修改后JSON文件最新值的解决办法
问题核心是Node.js的require机制会缓存已加载的模块(包括JSON文件),所以第一次加载后,即使文件内容修改,再次require仍会取缓存里的旧值。以下是两种可行的解决办法:
方法1:清除require缓存后重新加载
直接删除require.cache中对应JSON文件的缓存条目,再重新执行require即可拿到最新内容:
// 获取config.json的绝对路径,确保精准定位缓存条目 const configPath = require.resolve('./config.json'); // 清除该文件的缓存 delete require.cache[configPath]; // 重新加载文件 const data = require('./config.json'); console.log(data.version); // 输出最新的6.3.3
方法2:使用fs模块直接读取文件
绕过require的缓存机制,用Node.js内置的fs模块直接读取文件内容并解析,每次读取都会从文件系统获取最新数据:
const fs = require('fs'); // 同步读取(适合阻塞不影响流程的场景) function getLatestConfig() { const rawContent = fs.readFileSync('./config.json', 'utf8'); return JSON.parse(rawContent); } // 调用函数获取最新版本 const data = getLatestConfig(); console.log(data.version); // 输出最新的6.3.3 // 异步版本(推荐在IO密集场景使用,避免阻塞事件循环) async function getLatestConfigAsync() { const rawContent = await fs.promises.readFile('./config.json', 'utf8'); return JSON.parse(rawContent); } // 调用异步函数 getLatestConfigAsync().then(data => { console.log(data.version); });
注意事项
- 确保文件修改操作已经完全写入磁盘后再读取,否则可能读取到不完整的内容;
- 如果只是偶尔需要刷新配置,方法1更贴合模块加载的习惯;如果需要频繁读取最新文件状态,方法2更直接。
内容的提问来源于stack exchange,提问作者dezlight
相关产品推荐
相关产品推荐

