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

MrE*_*vil 5 node.js npm

除了package.json在项目根目录中获取文件之外,还有一种方法可以确定正在运行的node.js应用程序的依赖项列表吗?节点是否将此元信息保留为全局命名空间中的某些var?

Per*_* P. 6

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

显然,这与所安装的软件包是否真正require在应用程序中无关.

用法不是很好记录,但这应该让你开始.

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
    });
});
Run Code Online (Sandbox Code Playgroud)

例如:

{ dependencies:
   { npm: { version: '1.1.18', dependencies: [Object] },
     request: { version: '2.9.202' } } }
Run Code Online (Sandbox Code Playgroud)

否则,我认为唯一的另一个选择是内省module模块以获取有关当前加载/缓存的模块路径的信息.然而,这绝对不是作为公共API开发的.我不确定是否有任何替代方案,所以如果有例如,我会很乐意听到

var req = require('request'); // require some module for demo purposes
var m = require('module');

// properties of m contain current loaded module info, e.g. m._cache
Run Code Online (Sandbox Code Playgroud)