385 Stimmen

node.js require() cache - möglich, ungültig zu machen?

Aus der node.js-Dokumentation:

Module werden nach dem ersten Laden zwischengespeichert. Das bedeutet (unter anderem), dass bei jedem Aufruf von require('foo') genau das gleiche Objekt zurückgegeben wird, wenn es in dieselbe Datei aufgelöst wird.

Gibt es eine Möglichkeit, diesen Cache ungültig zu machen? d.h. für Unit-Tests möchte ich, dass jeder Test auf ein neues Objekt arbeitet.

1voto

OrangeDog Punkte 33207

Die Dokumentation sagt:

Module werden in diesem Objekt zwischengespeichert, wenn sie benötigt werden. Wenn Sie einen Schlüsselwert aus diesem Objekt löschen, wird das Modul bei der nächsten Anforderung neu geladen. Dies gilt nicht für native Addons, bei denen ein erneutes Laden zu einem Fehler führen wird.

0voto

Comtaler Punkte 1520

Wenn es sich um Unit-Tests handelt, ist ein weiteres gutes Werkzeug für die Verwendung Proxyquire . Jedes Mal, wenn Sie das Modul proxyquire, wird es die Modul-Cache ungültig und Cache ein neues. So können Sie auch die Module ändern, die für die zu testende Datei erforderlich sind.

0voto

gleb bahmutov Punkte 1531

Ich habe ein kleines Modul erstellt, um Module nach dem Laden aus dem Cache zu löschen. Dies erzwingt eine Neuauswertung des Moduls, wenn es das nächste Mal benötigt wird. Siehe https://github.com/bahmutov/require-and-forget

// random.js
module.exports = Math.random()
const forget = require('require-and-forget')
const r1 = forget('./random')
const r2 = forget('./random')
// r1 and r2 will be different
// "random.js" will not be stored in the require.cache

PS: Sie können "Selbstzerstörung" auch in das Modul selbst eingeben. Siehe https://github.com/bahmutov/unload-me

PSS: mehr Tricks mit Node erfordern in meinem https://glebbahmutov.com/blog/hacking-node-require/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X