如何获取所有可用节点.js模块的列表
How to obtain a list of all available Node.js modules?
我正在尝试将一些NPM功能放入我的Node.js程序中。特别是,我希望能够分析系统上可用的节点模块。这里的"模块"是指"模块标识符",因此可以是像"fd"这样的标识符,也可以是文件路径;换句话说,任何可以放入require()
调用并加载模块的东西。这个问题分为三个子问题:1) 获取所有核心模块的列表2) 获取所有加载模块的列表3) 获取所有已安装和可用模块的列表。
问题 1 由 zeke 的节点核心模块名称列表回答。加载另一个模块以查找核心模块列表并不优雅,它可能会过时,但它是一个选项并且确实有效。因此,(有序)列表['assert', 'buffer', 'child_process', ..., 'zlib']
。
2. 问题可以通过调用 Object.keys(require.cache)
来回答,它返回文件路径的列表。
我现在无法优雅地解决的是3.问题。有一个 shell 命令 npm ls
它返回树形图。但是有什么可用和更好的吗?
感谢您的聆听!汤姆
这是我发现修补的东西,我认为这应该是有效的。
V8 代码有一组标准的绑定,你在 Node 中看到过。它们包括但不限于:
- 司 司长
- 路径
- http
- 等。
此外,还有一个名为 process
的全局变量。这公开了流程级别的信息和功能,但也允许您通过process
变量内部称为 bindings
的函数来获取一些 V8 代码。
bindings(...)
函数允许您连接到 Node 创建的公开C++库,或者您可以按照 V8 开发人员指南创建自己的 NodeJS 模块(超出本答案的范围,在此处阅读更多内容)。
我在Node.cc
文件中看到的一条有趣的小行包括一个静态检查,用于检查关键字natives
的绑定。这似乎返回了您正在寻找的系统级模块列表,然后是一些。
话虽如此,我进入了 Node REPL 并插入了两行(我相信可以以更优雅、更具表现力的方式缩短)。另请注意,我正在修剪以下划线 (_) 开头的任何内容,以保留私有函数或绑定:
var natives = process.binding('natives');
for (var key in natives) {if (key.indexOf('_') !== 0) {console.log(key);}}
npm list
具有各种输出选项/标志,包括json
和parseable
(输出路径列表)
试试这个:
var exec = require('child_process').exec;
var cmd = 'npm ls --json';
exec(cmd, function(error, stdout, stderr) {
var treeObject = JSON.parse(stdout);
});
以上不需要外部包,但可能需要更多代码来解决缓冲区限制:https://github.com/nodejs/node/issues/4236
或者,也可以以编程方式使用npm
,也许通过全局 npm:
var npm = require('global-npm');
npm.load({}, function (err) {
npm.commands.list(null, function(err, treeObject) {
var firstLevelDependenciesArray = Object.keys(treeObject.dependencies);
});
});
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 节点.js将变量显示为 HTML
- 如何解决'窗口未定义'终端上的节点JS出错
- S3文件上传文件对象使用节点js
- 在节点 js 中使用护照本地模块验证(登录)密码时出错
- 嵌套的promise节点js
- 使用节点JS发送电子邮件
- 节点JS重定向循环
- 起始节点.js用于并行的线程池
- 获取图像节点js的主色
- 调整节点js中的图像大小
- 节点JS express和控制台输出到命令行与浏览器
- 节点JS:时间机器坏了——timekeeper.travel不做时间旅行
- 如何访问日期并将其插入数据库?节点.JS&MongoDB
- 节点.js快速删除 req.body 不起作用
- 节点.js中的嵌套异步操作
- 如何在核心php应用程序中使用节点js json Web令牌库
- 使用节点js的Bootstrap和Jquery
- 节点.js加密输入/输出类型
- 节点.js在不可能的地方打印“未定义”