有没有方法在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
当前回答
使用ES6模块,您可以执行以下操作:
import {version} from './package.json';
其他回答
使用ES6模块,您可以执行以下操作:
import {version} from './package.json';
我编写了一段有用的代码来获取父模块的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
}
选项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读取
我发现下面的代码片段最适合我。因为它使用require来加载package.json,所以无论当前的工作目录如何,它都能正常工作。
var pjson = require('./package.json');
console.log(pjson.version);
@病原体:
使用Browserify执行此操作会带来安全问题。注意不要将package.json暴露给客户端,因为这意味着所有的依赖版本号、构建和测试命令等都会发送给客户端。如果您在同一个项目中构建服务器和客户端,那么也会暴露服务器端版本号。攻击者可以使用这些特定数据来更好地适应服务器上的攻击。
对于那些寻找同样适用于服务器端的安全客户端解决方案的人来说,有genversion。它是一个命令行工具,从最近的package.json中读取版本,并生成一个可导入的CommonJS模块文件,用于导出版本。免责声明:我是维护者。
$ genversion lib/version.js
我承认客户端安全性不是OP的主要意图,但正如Mark Wallace和aug在回答中所讨论的,这是高度相关的,也是我发现此问答的原因。