NodeJS读取更新JSON文件报MODULE_NOT_FOUND错误如何解决
错误原因
这个MODULE_NOT_FOUND报错是两个常见问题导致的:
- 用
require()加载相对路径文件时,路径解析基准是你执行node命令的当前工作目录,不是updateJSON.js文件的所在目录,只要运行命令的目录不对就会找不到文件 require()本质是Node.js的模块加载方法,会缓存已加载的模块内容,如果你后续多次修改JSON文件再重读,会拿到缓存的旧内容,本身就不适合用来做动态JSON文件的读取操作
解决方法
推荐改用fs.readFile读取JSON文件内容后手动解析,同时用path.join拼接绝对路径避免相对路径解析错误,修改后的完整代码如下:
const fs = require('fs'); const path = require('path'); // 拼接得到test.json的绝对路径,__dirname是当前updateJSON.js文件所在的目录绝对路径 // 请根据你实际的文件相对位置调整后面的相对路径参数 const fileName = path.join(__dirname, 'src/myApp/test.json'); // 读取文件内容再解析JSON fs.readFile(fileName, 'utf8', (err, data) => { if (err) return console.log('读取文件失败:', err); const file = JSON.parse(data); file.key = "new value"; // 回写文件,加JSON.stringify第三个参数格式化输出,可读性更高 fs.writeFile(fileName, JSON.stringify(file, null, 2), (err) => { if (err) return console.log('写入文件失败:', err); console.log('修改后的内容:', JSON.stringify(file)); console.log('已成功写入到:' + fileName); }); });
如果一定要用require的方式,只需要修改文件路径的定义即可解决找不到文件的问题,但仍会存在缓存问题:
// 仅替换原fileName定义即可 const fileName = require('path').join(__dirname, 'src/myApp/test.json');
验证方法
如果修改后还是报错,可以在代码最前面加一行打印确认路径是否正确:
console.log('解析后的文件路径:', fileName);
对照打印出的路径确认文件是否真实存在即可。
内容的提问来源于stack exchange,提问作者Dave Brady
相关产品推荐
相关产品推荐

