3

nodejs にインストールした Express、Jade、Stylus などのバージョンを表示する方法はありますか。現在のバージョンをキャプチャして、ブラウザに表示します。

ありがとう

4

2 に答える 2

4

基本的にシンプルな

$ npm ls

インストールされているすべてのモジュール、それらのバージョン、およびそれらの依存関係のリストを同じ情報で再帰的に提供します。

お使いのブラウザーで機能するソリューションを求められた場合: 最も簡単な解決策は、おそらくchild_process モジュールを使用して Node.js から子プロセスとしてそのコマンドを実行し、子のstdoutプロパティを HTTP サーバーの応答ストリームにパイプすることです。 .

次にnpm ls、ブラウザ内の出力を取得します。

基本的なフレームは次のようになります。

var spawn = require('child_process').spawn,
    http = require('http');

http.createServer(function (req, res) {
  var npm = spawn('npm', [ 'ls' ]);
  npm.stdout.pipe(res);
}).listen(3000);

もちろん、あなたはそれをより良く、より快適にすることができます:-)

コメントからの更新:

var npm = spawn('npm', [ 'ls', '--json' ]);
于 2013-01-17T13:50:19.127 に答える
0

ゴロ・ローデンの回答は有効な方法を説明していますが、バージョンを読むためだけに別のプロセスを開くのは多すぎると思います。

特にpackage.jsonのバージョンについて質問しているので、そのファイルを読み取って解析してみませんか? fsこれにモジュールを使用することに成功しました。これが私のアプリです:

var application_root = __dirname,
    express = require('express'),
    path = require('path'),
    fs = require('fs');

var app = express();

app.configure(function () {
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static(path.join(application_root, "public")));
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.get('/api', function (req, res) {
    fs.readFile(application_root + '/package.json', function(err, fd) {
        console.log(err);
        console.log(fd);
        res.send('File data: ' + fd);
    });
});

app.listen(4242);

これにより、/api URL を要求すると、ルート フォルダーにある package.json ファイルの内容が表示されます。特定の依存関係のバージョンのみが必要な場合は、いつでもfdコールバックでオブジェクトのプロパティを照会して表示できます。

もちろん、ここでの欠点は、npm から「実際の」バージョンを使用するのではなく、常にファイルを読み取ることですが、ノード アプリケーションはとにかくファイルを読み取るため、それを実行しない理由がわかりません。

于 2013-01-17T15:12:29.120 に答える