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

当前回答

一个安全的选项是添加一个npm脚本,该脚本生成一个单独的版本文件:

"scripts": {
    "build": "yarn version:output && blitz build",
    "version:output": "echo 'export const Version = { version: \"'$npm_package_version.$(date +%s)'\" }' > version.js"
  }

这将输出包含以下内容的version.js:

export const Version = { version: "1.0.1.1622225484" }

其他回答

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

$ genversion lib/version.js

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

用于以下web组件的版本:

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

class Widget extends HTMLElement {

  constructor() {
    super()
    this.attachShadow({ mode: 'open' })
  }

  public connectedCallback(): void {
    this.renderWidget()
  }

  public renderWidget = (): void => {
    this.shadowRoot?.appendChild(this.setPageTemplate())
    this.setAttribute('version', 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);