nodejsでモジュールの逆引き


先日アダプター型のnodejsモジュールを公開したのですが、こういう形のモジュールはadapter – adaptee間のバージョンチェック方法が確立されていません。
JavaのOSGi等では普通に出来る事ですが、nodejsの場合、バージョンチェックが出来る依存関係というのは、全て包含になってしまいます。

var moduleA = require('moduleA');
var moduleB = require('moduleB');

moduleA.attach(moduleB);

と言う協働関係が約束として出来る事になっている moduleAとmoduleBにおいて、動作可能なバージョンのチェックは基本的に出来ません。1

そこで、任意のモジュールから package.json の情報を引っ張ってこれるモジュールを作ってみました。
もちろんrequire()された全てのモジュールがpackage.jsonを持っているわけでは無いので、存在するときだけ持ってくる、と言う仕組みです。

npm install --save moduleinfo

でインストールし、以下のようにして使用出来ます。

var moduleA = require('moduleA');
var moduleA_info = require('moduleinfo')(moduleA);
var version_moduleA = moduleA_info.packagejson.version;

moduleinfoには、’moduleA’のjsソースのパスも含まれます。

詳しくは、moduleinfo on github をご覧下さい。


  1. 本当に協働関係の約束が出来ているのであれば、いずれかのモジュールが verion() というメソッドを持つという決まりを作れば良いだけなんですが、私が作ったアダプターは先方の作者のあずかり知らないところで作ったものですから、そんな約束は作れません。
    あとからアダプターを作る場合は大体そう言う事になると思います。