Как получить информацию о npm установленных модулях программно? - PullRequest
3 голосов
/ 26 октября 2011

Есть ли способ или библиотека, которая могла бы определить, откуда был решен модуль require'd, и особенно, какие двоичные файлы он может содержать?

Например, когда мне требуется ('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 и просто проходить по каталогам, но по какой-то причине он не содержит пути, где мои модули фактически установлены.Каким-то образом требовать все еще находит их, хотя?

~ $ 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 ...   

Спасибо

1 Ответ

6 голосов
/ 27 октября 2011

используйте 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);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...