有没有方法在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
有没有方法在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.
其他回答
您可以使用项目版本包。
$ npm install --save project-version
Then
const version = require('project-version');
console.log(version);
//=> '1.0.0'
它使用process.env.npm_package_version,但如果由于某种原因缺少env-var,则回退到package.json中编写的版本。
有两种检索版本的方法:
需要package.json并获取版本:
const { version } = require('./package.json');
使用环境变量:
const version = process.env.npm_package_version;
请不要使用JSON.parse、fs.readFile和fs.readFileSync,也不要使用其他npm模块,这不是这个问题所必需的。
将package.json文件导入server.js或app.js,然后将packaage.json财产访问到服务器文件中。
var package = require('./package.json');
package变量包含package.json中的所有数据。
您可以使用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}`);
为什么不使用require resolve。。。
const packageJson = path.dirname(require.resolve('package-name')) + '/package.json';
const { version } = require(packageJson);
console.log('version', version)
使用此方法,所有子路径都适用:)