Javascript 如何获取所有可用Node.js模块的列表?
我正在尝试将一些NPM功能添加到Node.js程序中。特别是,我希望能够分析系统上可用的节点模块。“模块”在这里意味着“模块标识符”,因此类似于“fd”的标识符或文件路径;换句话说,可以放入Javascript 如何获取所有可用Node.js模块的列表?,javascript,node.js,npm,Javascript,Node.js,Npm,我正在尝试将一些NPM功能添加到Node.js程序中。特别是,我希望能够分析系统上可用的节点模块。“模块”在这里意味着“模块标识符”,因此类似于“fd”的标识符或文件路径;换句话说,可以放入require()调用并加载模块的任何内容。 该问题分为三个子问题: 1) 获取所有核心模块的列表 2) 获取所有已加载模块的列表 3) 获取所有已安装和可用模块的列表 问题1由zeke的列表回答。加载另一个模块来查找核心模块列表并不优雅,它可能会过时,但这是一个选项,确实有效。因此,(有序的)列表是['as
require()
调用并加载模块的任何内容。
该问题分为三个子问题:
1) 获取所有核心模块的列表
2) 获取所有已加载模块的列表
3) 获取所有已安装和可用模块的列表
问题1由zeke的列表回答。加载另一个模块来查找核心模块列表并不优雅,它可能会过时,但这是一个选项,确实有效。因此,(有序的)列表是['assert','buffer','child_process',…,'zlib']
二,。这个问题可以通过调用Object.keys(require.cache)
来回答,它返回一个文件路径列表
我现在无法优雅地解决的是3。问题。有一个shell命令npmls
,它返回一个树形图。但是,有什么有用的更好的吗
谢谢收听!
汤姆这是我发现的一些正在修补的东西,我认为这应该是有效的 V8代码有一组标准绑定,您已经在Node中看到了这些绑定。它们包括但不限于:
- 财政司司长
- 路径
- http
- 等等
进程
。这公开了流程级别的信息和功能,但也允许您通过名为bindings
的process
变量中的函数获得一些V8代码
< > >代码>绑定(…)<代码>函数允许您接触由节点创建的暴露C++库,或者您可以通过遵循V8开发者指南创建自己的NoDEJS模块(超出此答案的范围,请阅读此处更多)。
我在Node.cc
文件中看到了一个静态检查,用于检查关键字natives
的绑定。这似乎会返回您正在寻找的系统级模块列表,然后返回一些
话虽如此,我进入节点REPL并插入了两行代码(我确信可以以更优雅、更富有表现力的方式缩短这两行代码)。还要注意的是,我删掉了以下划线(3;)开头的任何内容,以便保留私有函数或绑定:
var natives=process.binding('natives');
对于(本机中的var-key){if(key.indexOf('')!==0){console.log(key);}
我在这里找到了一些修补方法,我认为这应该是有效的
V8代码有一组标准绑定,您已经在Node中看到了这些绑定。它们包括但不限于:
- 财政司司长
- 路径
- http
- 等等
进程
。这公开了流程级别的信息和功能,但也允许您通过名为bindings
的process
变量中的函数获得一些V8代码
< > >代码>绑定(…)<代码>函数允许您接触由节点创建的暴露C++库,或者您可以通过遵循V8开发者指南创建自己的NoDEJS模块(超出此答案的范围,请阅读此处更多)。
我在Node.cc
文件中看到了一个静态检查,用于检查关键字natives
的绑定。这似乎会返回您正在寻找的系统级模块列表,然后返回一些
话虽如此,我进入节点REPL并插入了两行代码(我确信可以以更优雅、更富有表现力的方式缩短这两行代码)。还要注意的是,我删掉了以下划线(3;)开头的任何内容,以便保留私有函数或绑定:
var natives=process.binding('natives');
对于(本机中的var-key){if(key.indexOf('')!==0){console.log(key);}
npm列表
具有,包括json
和parseable
(输出路径列表)
试试这个:
var exec = require('child_process').exec;
var cmd = 'npm ls --json';
exec(cmd, function(error, stdout, stderr) {
var treeObject = JSON.parse(stdout);
});
以上内容不需要外部软件包,但可能需要更多代码来绕过缓冲区限制:
或者也可以通过以下方式使用npm
:
npm列表
具有,包括json
和parseable
(输出路径列表)
试试这个:
var exec = require('child_process').exec;
var cmd = 'npm ls --json';
exec(cmd, function(error, stdout, stderr) {
var treeObject = JSON.parse(stdout);
});
以上内容不需要外部软件包,但可能需要更多代码来绕过缓冲区限制:
或者也可以通过以下方式使用npm
:
这取决于实现,这意味着如果脉轮或壁虎在背后,或者如果这种未记录的行为发生变化,这将不起作用。谢谢你,汤姆!你教给我的东西对我来说是新的,绝对值得探索。我的问题解决了。非常感谢你!关于引擎实现风格的有效点。很高兴它提供了对一些本机绑定的一些见解。:)这取决于实现,这意味着如果脉轮或壁虎在背后,或者如果这种未记录的行为发生变化,这将不起作用。谢谢你,汤姆!你教给我的东西对我来说是新的,绝对值得探索。我的问题解决了。非常感谢你!关于引擎实现风格的有效点。很高兴它提供了对一些本机绑定的一些见解。:)非常感谢你!我想我使用的是
npmls--parseable
,它解决了我的问题,并且我在研究中监督了它。非常感谢,这帮了大忙!非常感谢你!我想我使用的是npmls--parseable
,它解决了我的问题,并且我在研究中监督了它。非常感谢,这帮了大忙!