有没有方法在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
当前回答
如果您的应用程序是使用npm start启动的,您只需使用:
process.env.npm_package_version
有关详细信息,请参阅package.json vars。
其他回答
还有另一种方法可以从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在哪里。
我希望这会有所帮助。
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
一个安全的选项是添加一个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" }
有两种检索版本的方法:
需要package.json并获取版本:
const { version } = require('./package.json');
使用环境变量:
const version = process.env.npm_package_version;
请不要使用JSON.parse、fs.readFile和fs.readFileSync,也不要使用其他npm模块,这不是这个问题所必需的。
我编写了一段有用的代码来获取父模块的package.json
function loadParentPackageJson() {
if (!module.parent || !module.parent.filename) return null
let dir = path.dirname(module.parent.filename)
let maxDepth = 5
let packageJson = null
while (maxDepth > 0) {
const packageJsonPath = `${dir}/package.json`
const exists = existsSync(packageJsonPath)
if (exists) {
packageJson = require(packageJsonPath)
break
}
dir = path.resolve(dir, '../')
maxDepth--
}
return packageJson
}