有没有方法在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

当前回答

只是添加一个答案,因为我来到这个问题是为了找到在我的web应用程序中包含package.json版本的最佳方法。

我知道这个问题是针对Node.js的,但是,如果你使用Webpack捆绑你的应用程序,提醒你,推荐的方法是使用DefinePlugin在配置中声明一个全局版本并引用它。所以你可以在webpack.config.json中

const pkg = require('../../package.json');

...

plugins : [
    new webpack.DefinePlugin({
      AppVersion: JSON.stringify(pkg.version),
...

然后AppVersion现在是一个可供您使用的全局版本。还要确保在.eslintrc中通过globals属性忽略此项

其他回答

如果您的应用程序是使用npm start启动的,您只需使用:

process.env.npm_package_version

有关详细信息,请参阅package.json vars。

我实际上已经完成了这里的大多数解决方案,它们要么在Windows和Linux/OSX上都不起作用,要么根本不起作用;要么依赖于Unix shell工具,如grep/awk/sed。

从技术上来说,接受的答案是可行的,但它会把你的整个package.json都吸进你的构建中,这是一件糟糕的事情,只有绝望的人才应该暂时使用它来解封,而且一般情况下应该避免,至少对于生产代码来说是这样。另一种方法是仅使用该方法将版本写入可以使用的单个常量,而不是整个文件。

因此,对于其他寻求跨平台解决方案(不依赖Unix shell命令)和本地解决方案(无外部依赖)的人来说:

由于可以假设Node.js已经安装,并且已经跨平台安装,所以我只创建了一个make_version.js文件,其中包含:

const PACKAGE_VERSION = require("./package.json").version;
console.log(`export const PACKAGE_VERSION = "${PACKAGE_VERSION}";`);
console.error("package.json version:", PACKAGE_VERSION);

并向package.json添加了一个版本命令:

scripts: {
    "version": "node make_version.js > src/version.js",

然后添加:

    "prebuild": "npm run version",
    "prestart": "npm run version",

它在每次启动或构建时都会创建一个新的src/versions.js。当然,这可以很容易地在版本脚本中调整到不同的位置,或者在make_version.js文件中输出不同的语法和常量名称等。

使用ES6模块,您可以执行以下操作:

import {version} from './package.json';

如果您正在寻找模块(package.json:“type”:“module”)(ES6导入)支持,例如来自重构commonJS,那么(在撰写本文时)您应该执行以下任一操作:

import { readFile } from 'fs/promises';

const pkg = JSON.parse(await readFile(new URL('./package.json', import.meta.url)));

console.log(pkg.version)

或者,使用node--experimental json modules index.js运行node进程:

import pkg from './package.json'
console.log(pkg.version)

然而,在json模块变得普遍可用之前,您将收到警告。

如果出现语法或(顶级)异步错误,则很可能是较旧的节点版本。至少更新到node@14.

我使用查找同步来执行此操作:

var findup = require('findup-sync');
var packagejson = require(findup('package.json'));
console.log(packagejson.version); // => '0.0.1'