gist

2012年2月5日日曜日

Node.jsでpackage.jsonファイルを読み込んでみる

Node.jsのfsモジュールを、ファイルの入出力ができます。

npmでインストールしたモジュールを読み込んでみます。

npmでインストールしたモジュールは、node_modulesディレクトリに保存されます。パッケージ名やバージョン、依存パッケージなどの詳細情報は、node_modules/パッケージ名/package.json に記述されています。fsを使って、package.jsonを読み込んでみます。

read_packages.js

// File Systemモジュールを読み込む
var fs = require('fs');

var readPackageJson = function(path, cb){
    // パスの読み込み開始
    var path = path + "/node_modules";
    fs.readdir(path, function(err, dirs){
        if(err) cb(err, null);
        // dirsには指定したパスのファイル名・ディレクトリ名の一覧が入っている
        for(var i = 0; i < dirs.length; i++){

            var dir = dirs[i];
            // 頭文字が.の場合読み込まない
            if(dir.charAt(0) === '.') continue;
            
            // package.jsonのパスを指定
            var jsonPath = path + "/" + dir + "/package.json";
            
            // package.jsonを読み込み開始
            fs.readFile(jsonPath, function(err, data){
                if(err) cb(err, null);
                // dataには読み込んだBufferが入っている
                // toString('utf8')で文字列にする
                var jsonStr = data.toString('utf8');
                // JSONをパースしてコールバック
                cb(null, JSON.parse(jsonStr));
            });
        }
    });
};

// 実行
readPackageJson(".", function(err, json){
    if(err) throw err;
    console.log(json.name +"@" + json.version );
});

実行結果

$ node read_packages.js
express@2.5.6
socket.io@0.8.7

まあ、npm list コマンドで依存関係まで表示されるので、このプログラム自体に意味はないかも。ファイルを読み込む練習ってことで。

0 件のコメント: