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

从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:“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.

以下是如何读取package.json的版本:

fs = require('fs')
json = JSON.parse(fs.readFileSync('package.json', 'utf8'))
version = json.version

编辑:哇,这个答案最初来自2012年!现在有几个更好的答案。可能最干净的是:

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

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

process.env.npm_package_version

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

您可以使用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}`);

我知道这不是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', '')\""

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