有没有办法可以显示我们在nodejs中安装的Express,Jade,Stylus ..的版本。捕获当前版本并在浏览器中显示。
由于
答案 0 :(得分:4)
基本上是一个简单的
$ npm ls
做你想要的:它以递归的方式为你提供所有已安装模块,它们的版本以及它们的依赖关系的列表。
正如您所要求的解决方案在您的浏览器中有效:最简单的解决方案可能是使用child_process module和pipe来自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' ]);
答案 1 :(得分:0)
尽管Golo Roden的回复描述了一种有效的方式,但我认为打开一个单独的过程只是为了阅读一个版本太多了。
您是专门询问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中的“真实”版本,但是由于你的节点应用程序仍在读取文件,我不明白为什么不这样做。