2014-08-27 70 views
0

给定一个节点js包,我可以找到它所依赖的包。 对于每个依赖关系,如何获取当前包使用的导出?如何获取节点js模块中使用的所有外部函数

例子:JavaScript文件中,我有以下的代码行

var async = require('async'); 
...... 
async.mapSeries(files, function (entry, done) { 
...... 

我希望能够把解压出来的是这个js使用从异步

+0

Grep?用日志记录的东西包装模块中的所有东西? – 2014-08-27 16:45:55

+0

我想静态地做这件事。 – 2014-08-27 16:50:51

+0

Grep?问题是,如果你静态地执行这个操作,你就会冒着丢失用法的风险,因为'async.mapSeries'不是唯一可以调用'mapSeries'的方法。为了完成这项工作,你基本上需要运行代码。 – 2014-08-27 16:56:56

回答

0

你可以比较容易地做到这一点mapSeries功能例如esprima,但是像@DaveNewton说你可能会错过一些,因为JS的动态特性,以及exports可以用许多不同的方式进行修改。

您不仅需要“运行代码”以获得完整的防弹列表,还必须以100%的覆盖率运行它。可能没有什么值得做的事情。

+0

你可以请我帮助我如何使用Esprima来做到这一点?我尝试使用脚本/服务器/ jsdepend /引用查找程序,findReferences函数。这只给我需求和依赖信息。它并不告诉我哪里有一个函数在外部依赖关系上被调用。 – 2014-09-09 13:06:15

+0

基本上你需要解析文件,遍历AST,并找到任何使用module.exports的分配。不是很短的代码,但不是很复杂。 – 2014-09-12 06:22:28