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

其他回答

用于以下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)
  }
}

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

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

NPM内衬:

从npm v7.20.0开始:

npm pkg获取版本

在npm v7.20.0之前:

npm-s运行env echo“$npm_package_version”

注意,这两种方法的输出略有不同:前者输出用引号括起来的版本号(即“1.0.0”),后者不输出(即1.0.0)。

在Unix中删除引号的一个解决方案是使用xargs

npm pkg get version | xargs echo

我们可以通过两种方式从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在哪里。

我希望这会有所帮助。