打印所有已安装的node.js模块的列表

Print a list of all installed node.js modules

在我正在处理的node.js脚本中,我希望将所有node.js模块(使用npm安装)打印到命令行。我该怎么做?

1
2
3
console.log(__filename);

//now I want to print all installed modules to the command line. How can I do this?


如果您只对不带完整树的全局安装程序包感兴趣,那么:

npm -g ls --depth=0

或局部(省略-g):

npm ls --depth=0


使用NPM LS(甚至有JSON输出)

从脚本中:

测试:JS:

1
2
3
4
5
6
7
function npmls(cb) {
  require('child_process').exec('npm ls --json', function(err, stdout, stderr) {
    if (err) return cb(err)
    cb(null, JSON.parse(stdout));
  });
}
npmls(console.log);

运行:

1
2
> node test.js
null { name: 'x11', version: '0.0.11' }


所有全球安装的第三方模块列表,写入控制台:

1
 npm -g ls

在任何操作系统中

1
npm -g list

这就是它


通常,有两种方法可以列出已安装的软件包-通过命令行界面(CLI)或在使用API的应用程序中。

这两个命令都将以树形结构打印到stdout上安装的所有包版本及其依赖项。

CLI

1
npm list

使用EDOCX1(全局)标志列出所有全局安装的软件包。使用--depth=0标志只列出顶级包,而不列出它们的依赖项。

美国石油学会

在您的例子中,您希望在脚本中运行这个,所以您需要使用API。来自文档:

1
npm.commands.ls(args, [silent,] callback)

除了打印到stdout之外,数据还将传递到回调中。


为什么不从package.jsondependencies中抓到它们呢?

当然,这只会给你实际保存的那些,但无论如何你应该这样做。

1
console.log(Object.keys(require('./package.json').dependencies));


1
2
3
4
for package in `sudo npm -g ls --depth=0 --parseable`; do
    printf"${package##*/}
";
done