有没有方法在nodejs应用程序中获取package.json中设置的版本?我想要这样的东西

var port = process.env.PORT || 3000
app.listen port
console.log "Express server listening on port %d in %s mode %s", app.address().port, app.settings.env, app.VERSION

当前回答

有两种检索版本的方法:

需要package.json并获取版本:

const { version } = require('./package.json');

使用环境变量:

const version = process.env.npm_package_version;

请不要使用JSON.parse、fs.readFile和fs.readFileSync,也不要使用其他npm模块,这不是这个问题所必需的。

其他回答

对于那些寻找同样适用于服务器端的安全客户端解决方案的人来说,有genversion。它是一个命令行工具,从最近的package.json中读取版本,并生成一个可导入的CommonJS模块文件,用于导出版本。免责声明:我是维护者。

$ genversion lib/version.js

我承认客户端安全性不是OP的主要意图,但正如Mark Wallace和aug在回答中所讨论的,这是高度相关的,也是我发现此问答的原因。

我编写了一段有用的代码来获取父模块的package.json

function loadParentPackageJson() {
    if (!module.parent || !module.parent.filename) return null
    let dir = path.dirname(module.parent.filename)
    let maxDepth = 5
    let packageJson = null
    while (maxDepth > 0) {
        const packageJsonPath = `${dir}/package.json`
        const exists = existsSync(packageJsonPath)
        if (exists) {
            packageJson = require(packageJsonPath)
            break
        }
        dir = path.resolve(dir, '../')
        maxDepth--
    }
    return packageJson
}

我们可以通过两种方式从package.json中读取版本或其他密钥

1-使用require并导入所需的密钥,例如:

const version = require('./package.json')

2-使用文档中提到的package_vars

process.env.npm_package_version

还有另一种方法可以从package.json文件中获取某些信息,即使用pkginfo模块。

此模块的使用非常简单。您可以使用以下方法获取所有包变量:

require('pkginfo')(module);

或仅某些细节(本例中的版本)

require('pkginfo')(module, 'version');

并且您的包变量将设置为module.exports(因此可以通过module.exports.version访问版本号)。

您可以使用以下代码段:

require('pkginfo')(module, 'version');
console.log "Express server listening on port %d in %s mode %s", app.address().port, app.settings.env, module.exports.version

这个模块有非常好的功能-它可以在项目中的任何文件中使用(例如在子文件夹中),它将自动从package.json中获取信息。因此,您不必担心package.jsn在哪里。

我希望这会有所帮助。

您可以使用ES6导入package.json以检索版本号并在控制台上输出版本。

import {name as app_name, version as app_version}  from './path/to/package.json';

console.log(`App ---- ${app_name}\nVersion ---- ${app_version}`);