确定正在运行的node.js应用程序中使用的NPM模块

除了抓取项目根目录下的package.json文件,还有一种方法可以确定正在运行的node.js应用程序的依赖关系列表吗? 节点是否将这些元信息作为全局名称空间中的某些var提供?

如果您只是在应用程序目录中查找当前安装的npm包,则可以安装npm包( npm install -g npm )并以编程方式调用ls以列出已安装的包和依赖关系树。

显然,这与安装的软件包是否真的require在应用程序中没有关系。

用法没有很好的logging,但这应该让你开始。

 var npm = require('npm'); npm.load(function(err, npm) { npm.commands.ls([], true, function(err, data, lite) { console.log(data); //or lite for simplified output }); }); 

例如:

 { dependencies: { npm: { version: '1.1.18', dependencies: [Object] }, request: { version: '2.9.202' } } } 

否则,我相信唯一的其他select是反思module模块获取有关当前加载/caching模块path的信息。 但是,这绝对不是作为公共API开发的。 我不确定是否有其他的select,所以如果有兴趣,

 var req = require('request'); // require some module for demo purposes var m = require('module'); // properties of m contain current loaded module info, egm_cache 

我相信你可以使用需求分析器 ,根据艾萨克 (可能会错过一些)的作品。 你可以从11:55在Nodeup的第一个播客中听到这个。

或者你可以试试James node-detective ,它可能会更好地find你的依赖关系(但不是通过运行代码),而是因为Javascript的dynamic性(12:46)。

侦探

find所有的调用require(),无论多么疯狂地嵌套使用正确的步行的AST。

PS:把这些package.jsonvariables暴露给node.js,你可以使用node-pkginfo