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

当前回答

const{version}=require(“./package.json”);console.log(版本);const v=require(“./package.json”).version;控制台日志(v);

其他回答

选项1

最佳实践是使用npm环境变量从package.json进行版本转换。

process.env.npm_package_version

更多信息:https://docs.npmjs.com/using-npm/config.html

只有当您使用NPM命令启动服务时,这才有效。

快速信息:您可以使用process.env.npm_package_[keyname]读取pacakge.json中的任何值

选项2

使用在环境变量中设置版本https://www.npmjs.com/package/dotenv作为.env文件,并将其作为process.env.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在哪里。

我希望这会有所帮助。

我知道这不是OP的意图,但我只是不得不这样做,所以希望这对下一个人有所帮助。

如果您在CI/CD过程中使用docker compose,您可以通过这种方式获得它!

version:
  image: node:7-alpine
  volumes:
    - .:/usr/src/service/
  working_dir: /usr/src/service/
  command: ash -c "node -p \"require('./package.json').version.replace('\n', '')\""

对于图像,可以使用任何节点图像。我用阿尔卑斯山因为它是最小的。

const{version}=require(“./package.json”);console.log(版本);const v=require(“./package.json”).version;控制台日志(v);

我实际上已经完成了这里的大多数解决方案,它们要么在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文件中输出不同的语法和常量名称等。