Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取所有可用Node.js模块的列表?_Javascript_Node.js_Npm - Fatal编程技术网

Javascript 如何获取所有可用Node.js模块的列表?

Javascript 如何获取所有可用Node.js模块的列表?,javascript,node.js,npm,Javascript,Node.js,Npm,我正在尝试将一些NPM功能添加到Node.js程序中。特别是,我希望能够分析系统上可用的节点模块。“模块”在这里意味着“模块标识符”,因此类似于“fd”的标识符或文件路径;换句话说,可以放入require()调用并加载模块的任何内容。 该问题分为三个子问题: 1) 获取所有核心模块的列表 2) 获取所有已加载模块的列表 3) 获取所有已安装和可用模块的列表 问题1由zeke的列表回答。加载另一个模块来查找核心模块列表并不优雅,它可能会过时,但这是一个选项,确实有效。因此,(有序的)列表是['as

我正在尝试将一些NPM功能添加到Node.js程序中。特别是,我希望能够分析系统上可用的节点模块。“模块”在这里意味着“模块标识符”,因此类似于“fd”的标识符或文件路径;换句话说,可以放入
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
,它解决了我的问题,并且我在研究中监督了它。非常感谢,这帮了大忙!