有没有方法在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
当前回答
我使用查找同步来执行此操作:
var findup = require('findup-sync');
var packagejson = require(findup('package.json'));
console.log(packagejson.version); // => '0.0.1'
其他回答
我使用查找同步来执行此操作:
var findup = require('findup-sync');
var packagejson = require(findup('package.json'));
console.log(packagejson.version); // => '0.0.1'
还有另一种方法可以从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在哪里。
我希望这会有所帮助。
选项1
最佳实践是使用npm环境变量从package.json进行版本转换。
process.env.npm_package_version
更多信息:https://docs.npmjs.com/using-npm/config.html
只有当您使用NPM命令启动服务时,这才有效。
快速信息:您可以使用process.env.npm_package_[keyname]读取pacakge.json中的任何值
选项2
使用在环境变量中设置版本https://www.npmjs.com/package/dotenv作为.env文件,并将其作为process.env.version读取
对于那些寻找同样适用于服务器端的安全客户端解决方案的人来说,有genversion。它是一个命令行工具,从最近的package.json中读取版本,并生成一个可导入的CommonJS模块文件,用于导出版本。免责声明:我是维护者。
$ genversion lib/version.js
我承认客户端安全性不是OP的主要意图,但正如Mark Wallace和aug在回答中所讨论的,这是高度相关的,也是我发现此问答的原因。
只是添加一个答案,因为我来到这个问题是为了找到在我的web应用程序中包含package.json版本的最佳方法。
我知道这个问题是针对Node.js的,但是,如果你使用Webpack捆绑你的应用程序,提醒你,推荐的方法是使用DefinePlugin在配置中声明一个全局版本并引用它。所以你可以在webpack.config.json中
const pkg = require('../../package.json');
...
plugins : [
new webpack.DefinePlugin({
AppVersion: JSON.stringify(pkg.version),
...
然后AppVersion现在是一个可供您使用的全局版本。还要确保在.eslintrc中通过globals属性忽略此项