除了package.json
在项目根目录中获取文件之外,还有其他方法可以确定正在运行的 node.js 应用程序的依赖项列表吗?节点是否将此元信息作为全局命名空间中的某个 var 保留?
问问题
2861 次
2 回答
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
});
});
例如:
{ dependencies:
{ npm: { version: '1.1.18', dependencies: [Object] },
request: { version: '2.9.202' } } }
否则,我相信唯一的其他选择是自省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
于 2012-04-22T09:44:27.690 回答
2
我相信您可以使用require-analyzer,根据Isaacs的说法(可能会错过一些)。您可以从 11:55在Nodeup 的第一个播客中听到这一点。
或者您可以尝试 James node-detective,它可能会更好地找到您的依赖项(但不是通过运行代码),但由于 Javascript 的动态特性(12:46)。
侦探
使用正确的 AST 遍历查找所有对 require() 的调用,无论嵌套多么疯狂。
PS:要将这些 package.json 变量公开给 node.js,您可以使用node-pkginfo
于 2012-04-23T01:01:54.360 回答