【问题标题】:How to get details of npm installed modules programatically?如何以编程方式获取 npm 已安装模块的详细信息?
【发布时间】:2011-12-15 12:16:03
【问题描述】:

有没有方法或库可以告诉你从哪里解析了需要的模块,尤其是它可能包含哪些二进制文件?

例如,当我 require('coffee-script') 时,(AFAIK)无法告诉它的安装目录以及它有哪些命令行二进制文件。

理想情况下,我需要的是 require 和 package.json 解析器之间的某种混合,例如就像遵循假设的“npminfo”库一样。

var npminfo = require('npminfo')

// get info about module
var pkginfo = npminfo.resolve('coffee-script')
pkginfo.version => '1.1.0'
pkginfo.path  => '/home/teemu/node_modules/coffee-script'
pkginfo.bins =>  { coffee: '/home/teemu/node_modules/coffee-script/bin/coffee', cake: '/home/teemu/node_modules/coffee-script/bin/cake'}

// generic info
npminfo.binpath => '/home/teemu/.node_modules/bin' 

我确实尝试使用 require.paths 并且只是遍历目录,但由于某种原因它不包含我的模块实际安装的路径。不知何故 require 仍然找到它们?

~ $ node
> require.paths
[ '/Users/teemuikonen/.node_modules',
  '/Users/teemuikonen/.node_libraries',
  '/usr/local/lib/node' ]
>

~ $ ls /usr/local/lib/node
wafadmin

~ $ ls .node_modules/
ls: .node_modules: No such file or directory

~ $ ls node_modules/
cli  cradle coffee-script ...   

谢谢

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    使用 require.resolve('module') 获取路径

    require 在每个级别查找名为 node_modules 的文件夹。这没有显示在 require.paths() 中,但我不知道为什么。

    更新: 这将记录模块文件夹中的文件

    var fs = require('fs');
    var path = require('path');
    var path1 = require.resolve('module');
    path1 = path.dirname(path1);
    fs.readdir(path1, function(err, files){
      console.log(err);
      console.log(files);
    })
    

    【讨论】:

    • 谢谢!这将返回脚本的路径,但是有没有办法获取模块目录?
    • var fs = require('fs'); var path = require('path'); var path1 = require.resolve('module'); path1 = path.dirname(path1); fs.readdir(path1, function(err, files){ console.log(err); console.log(files); })
    • 这将为您提供模块所在目录中的文件列表。从那里您必须手动找到您要查找的内容(如 package.json 文件)并解析它。
    猜你喜欢
    • 2015-01-15
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多