【发布时间】:2013-03-18 20:57:40
【问题描述】:
有没有一种方法可以显示我们在 nodejs 中安装的 Express、Jade、Stylus.. 的版本。捕获当前版本并在浏览器中显示。
谢谢
【问题讨论】:
标签: javascript node.js npm
有没有一种方法可以显示我们在 nodejs 中安装的 Express、Jade、Stylus.. 的版本。捕获当前版本并在浏览器中显示。
谢谢
【问题讨论】:
标签: javascript node.js npm
基本上很简单
$ npm ls
做你想做的事:它以递归方式为你提供所有已安装模块、它们的版本和它们的依赖项的列表,并带有相同的信息。
正如您要求在浏览器中运行的解决方案:最简单的解决方案可能是使用 child_process module 和 pipe 子进程的 stdout 属性从 Node.js 将该命令作为子进程运行到 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);
当然你可以让它更漂亮、更舒适等等:-)
来自 cmets 的更新:
var npm = spawn('npm', [ 'ls', '--json' ]);
【讨论】:
npm ls --json 可以让您根据需要轻松解析和重新格式化输出。
cosole.log(npm); 中得到以下回复
node wamp.js { 域:null,_events:null,_maxListeners:10,_closesNeeded:3,_closesGot:0,signalCode:null,exitCode:null,killed:false,_handle: {所有者:[Circular],onexit:[Funct pid:0,stdin:{域:null,_events:null,_maxListeners:10,_handle:{writeQueueSize:0,所有者:[Circular],onread:[Function:onread] }, _pendingWriteReqs: 0, _flags: 0, _connectQueueSize: 0, destroy: false, errorEmitted: false, bytesRead: 0, _bytesDispatched: 0, allowHalfOpen: undefined, writable: true, readable: false }, stdout: { domain: null, _事件:`
虽然 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 的“真实”版本,但是由于您的节点应用程序无论如何都会读取文件,我不明白为什么不这样做。
【讨论】: