Для очистки требуется кеш

Я пытаюсь удалить модуль из кеша здесь.

В документации мы читаем:

require.cache

  • Объект

Модули кэшируются в этом объекте, когда они требуются. Удалив значение ключа из этого объекта, следующее требование перезагрузит модуль.

Итак, я создал файл с именем 1.js, который содержит одну строку:

module.exports = 1;

Затем я требую его через node shell:

[email protected]:~/Documents/test$ node
> require("./1")
1
> require.cache
{ '/home/ionicabizau/Documents/test/1.js': 
   { id: '/home/ionicabizau/Documents/test/1.js',
     exports: 1,
     parent: 
      { id: 'repl',
        exports: [Object],
        parent: undefined,
        filename: '/home/ionicabizau/Documents/test/repl',
        loaded: false,
        children: [Object],
        paths: [Object] },
     filename: '/home/ionicabizau/Documents/test/1.js',
     loaded: true,
     children: [],
     paths: 
      [ '/home/ionicabizau/Documents/test/node_modules',
        '/home/ionicabizau/Documents/node_modules',
        '/home/ionicabizau/node_modules',
        '/home/node_modules',
        '/node_modules' ] } }
# edited file to export 2 (module.exports = 2;)
> require.cache = {}
{}
> require.cache
{}
> require("./1") // supposed to return 2
1

Итак, почему require("./1") возвращает 1, когда мой файл содержит module.exports = 2, и кеш очищается?

Выполняя некоторую отладку, я увидел, что есть объект Module._cache, который не очищается, когда я делаю require.cache = {}.

Ответ 1

require.cache - это только ссылка на объект открытого кеша, это свойство не используется напрямую, поэтому его изменение ничего не делает. Вам нужно перебирать клавиши и на самом деле delete их.