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

当前回答

我发现下面的代码片段最适合我。因为它使用require来加载package.json,所以无论当前的工作目录如何,它都能正常工作。

var pjson = require('./package.json');
console.log(pjson.version);

@病原体:

使用Browserify执行此操作会带来安全问题。注意不要将package.json暴露给客户端,因为这意味着所有的依赖版本号、构建和测试命令等都会发送给客户端。如果您在同一个项目中构建服务器和客户端,那么也会暴露服务器端版本号。攻击者可以使用这些特定数据来更好地适应服务器上的攻击。

其他回答

或者在普通的旧壳中:

$ node -e "console.log(require('./package.json').version);"

这可以缩短为

$ node -p "require('./package.json').version"

将package.json文件导入server.js或app.js,然后将packaage.json财产访问到服务器文件中。

var package = require('./package.json');

package变量包含package.json中的所有数据。

为什么不使用require resolve。。。

const packageJson = path.dirname(require.resolve('package-name')) + '/package.json';
const { version } = require(packageJson);
console.log('version', version)

使用此方法,所有子路径都适用:)

我正在使用create-react应用程序,在执行react应用程序时,我没有process.env.npm_package_version可用。

我不想在我的客户端代码中引用package.json(因为向客户端暴露了危险的信息,比如包版本),也不想安装另一个依赖项(genversion)。

我发现我可以通过在package.json中使用$npm_package_version来引用package.jsn中的版本:

"scripts": {
    "my_build_script": "REACT_APP_VERSION=$npm_package_version react-scripts start"
}

现在,版本始终遵循package.json中的版本。

选项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读取