4

必要なモジュールがどこから解決されたか、特にどのバイナリが含まれている可能性があるかを判断できる方法またはライブラリはありますか?

たとえば、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を使用してディレクトリをウォークスルーしようとしましたが、何らかの理由で、モジュールが実際にインストールされているパスが含まれていません。どういうわけかまだそれらを見つける必要がありますか?

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

ありがとう

4

1 に答える 1

7

require.resolve('module')を使用してパスを取得します

requireは、各レベルでnode_modulesというフォルダーを探します。これはrequire.paths()には表示されませんが、理由はわかりません。

更新:これにより、modulesフォルダー内のファイルがログに記録されます

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);
})
于 2011-10-27T01:40:17.200 に答える