123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- var path = require('path');
- var callsite = require('callsite');
- require.find = function (moduleName) {
- if (moduleName[0] === '.') {
- var stack = callsite();
- for (var i in stack) {
- var filename = stack[i].getFileName();
- if (filename !== module.filename) {
- moduleName = path.resolve(path.dirname(filename), moduleName);
- break;
- }
- }
- }
- try {
- return require.resolve(moduleName);
- } catch (e) {
- return;
- }
- };
- require.decache = function (moduleName) {
- moduleName = require.find(moduleName);
- if(!moduleName) { return; }
-
-
- require.searchCache(moduleName, function (mod) {
- delete require.cache[mod.id];
- });
-
-
- Object.keys(module.constructor._pathCache).forEach(function (cacheKey) {
- if (cacheKey.indexOf(moduleName) > -1) {
- delete module.constructor._pathCache[cacheKey];
- }
- });
- };
- require.searchCache = function (moduleName, callback) {
-
- var mod = require.resolve(moduleName);
- var visited = {};
-
-
-
- if (mod && ((mod = require.cache[mod]) !== undefined)) {
-
- (function run(current) {
- visited[current.id] = true;
-
-
- current.children.forEach(function (child) {
-
-
- if (path.extname(child.filename) !== '.node' && !visited[child.id]) {
- run(child);
- }
- });
-
-
- callback(current);
- })(mod);
- }
- };
- module.exports = require.decache;
- module.exports.default = require.decache;
|