我想分享另一种使用require.cache的解决方案。它涉及解析require.cache以查找已经被引用的文件,并提供最终被引用的文件名称。
var someModule = require('./someModule');
var path = require('path');
for( var p in require.cache){
console.log( trim( p ) );
}
function trim(p){
var re = /(.*?).js/;
var basename = path.basename( p );
var moduleName = re.exec( basename )[1];
return moduleName;
}
测试文件:
someModule.js
var fs = require('fs');
var os = require('os');
var _ = require('lodash');
var test = require('./test');
test.js
var a = require('lodash'),
jQuery = require('jquery');
运行getRequires.js会得到以下结果:
getRequires
someModule
index
test
jquery
请注意,它包含了自身,因此还需要有一些东西将其修剪掉。
同时注意到index,这来自于lodash库。
下面是一个修改示例,可以显示文件路径。
var someModule = require('./someModule');
var path = require('path');
for( var p in require.cache){
console.log( trim( p ) );
}
function trim(p){
var re = /(.*?).js/;
var basename = path.basename( p );
var moduleName = re.exec( basename )[1];
return [ moduleName, p ];
}
这使我们得到了:
[ 'getRequires',
'/<myroot>/require/getRequires.js' ]
[ 'someModule',
'/<myroot>/require/someModule.js' ]
[ 'index',
'/<myroot>/require/node_modules/lodash/index.js' ]
[ 'test', '/<myroot>/require/test.js' ]
[ 'jquery',
'/<myroot>/require/node_modules/jquery/dist/jquery.js' ]
require是我编写代码的目录。
请告诉我您对此解决方案的想法。还有更多工作要做,但我认为这可以让您开始。
require
的列表,而不仅仅是针对那个特定文件,所以对我来说并不是很有用。 - Ryan McDonald