Skip to content
  • 问题描述:在node.js中通过require加载了一个json文件,将它的数据保存到了变量par里了,后期修改了这个变量,在另一处代码块再次通过require获取json文件内容,获取到的是之前的那次修改后的结果

  • 原因:这是因为require加载的模块是以缓存的方式处理的,加载后返回的是一个引用,而不是原始数据的深拷贝

  • 示例代码

    javascript
    // 在某个文件中,如 app.js
    let foodsJson = require('../store/foods.json');
    
    // 修改数据
    foodsJson.push({ name: '新食物', price: 10 });
    
    // 在其他地方引用这个数据
    let anotherReference = require('../store/foods.json');
    console.log(anotherReference); // 将输出包含"新食物"的数组
  • 解决方法: 使用delete require.cache[require.resolve('../store/foods.json')] 来清除缓存,然后再进行require加载

    javascript
    // 在其他地方引用这个数据
    // 清除缓存
    delete require.cache[require.resolve('../store/foods.json')];
    let anotherReference = require('../store/foods.json');
    console.log(anotherReference); // 不会输出包含"新食物"的数组

MIT版权,未经许可禁止任何形式的转载