在nodejs中运行时检查包版本?

时间:2015-04-20 07:11:43

标签: node.js express package

我将package.json中的一些条目定义为" *"

"dependencies": {
    "express": "4.*",
    "passport": "*",
    "body-parser": "*",
    "express-error-handler": "*"
},

我不想将这些值冻结到当前版本。如何知道我的软件包在运行时的版本?我不介意逐个检查,因为我没有很多人:)

BTW:我不能npm list --depth=0,因为我无法直接访问vm(PaaS限制),只记录日志。

4 个答案:

答案 0 :(得分:6)

您可以使用fs模块读取node_modules目录中的目录,然后阅读每个目录中的package.json

var fs = require('fs');
var dirs = fs.readdirSync('node_modules');
var data = {};
dirs.forEach(function(dir) {
    try{
    var file = 'node_modules/' + dir + '/package.json';
    var json = require(file);
    var name = json.name;
    var version = json.version;
    data[name] = version;
    }catch(err){}
});
console.debug(data['express']); //= 4.11.2

答案 1 :(得分:0)

如果您需要前端版本,可以使用npm软件包,它可以在客户端和服务器端使用。

global-package-version

您可以在代码中使用它

import globalPackageVersion from 'global-package-version';

// package name is 'lodash'
globalPackageVersion(require('lodash/package.json'));

// You can type 'packageVersion' in browser console to check lodash version
// => packageVersion = { lodash: '4.7.2'}

packageVersion在服务器端使用时成为全局对象,在客户端使用时成为窗口对象。适用于webpack和所有其他捆绑工具。

免责声明:我是此套餐的作者:)

答案 2 :(得分:0)

可接受的解决方案可以在性能和稳定性方面进行改进:

1:软件包名称为THE目录。在通常情况下,如果您正在寻找特定的软件包,则无需加载每个模块。

2:由于路径的形成方式,该代码无法在所有操作系统上运行

3:使用Dim MyConstantNumbers As Range On Error Resume Next Set MyConstantNumbers = Range("A1:A10").SpecialCells(xlCellTypeConstant, xlNumbers) On Error Goto 0 If Not MyConstantNumbers Is Nothing Then 'color your cells here End If 意味着路径需要相对于当前文件(仅当文件位于项目文件夹的顶部且位于require侧时,此路径才有效)。在大多数情况下,使用node_modulesreadFile是更简单的方法。

readFileSync

答案 3 :(得分:0)

我已经“现代化”了一个@laggingreflex答案,它可以在ES6 +节点10上运行,并在以aws运行的lambda上进行了测试。这是Express应用程序的终结点。

const fs = require("fs");

module.exports.dependencies = async (_req, res) => {
  const dirs = fs.readdirSync("./node_modules");

  const modulesInfo = dirs.reduce((acc, dir) => {
    try {
      const file = `${dir}/package.json`;
      const { name, version } = require(file);
      return { ...acc, [name]: version };
    } catch (err) {}
  }, {});
  res.status(200).json(modulesInfo);
};