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
15 回答
7
为什么不使用原生方式?其他方法对我来说都失败了 .
// Load native UI library
var gui = require('nw.gui');
// Get the name field in manifest
gui.App.manifest.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
15 回答
为什么不使用原生方式?其他方法对我来说都失败了 .
还有另一种从
package.json
文件中获取某些信息的方法,即使用pkginfo模块 .使用这个模块非常简单 . 您可以使用以下方法获取所有包变量
或者只是某些细节(在这种情况下为
version
)并且您的包变量将设置为
module.exports
(因此可以通过module.exports.version
访问版本号) .您可以使用以下代码段:
此模块具有非常好的功能 - 它可以在项目的任何文件中使用(例如在子文件夹中),它将自动从
package.json
获取信息 . 所以你不必担心package.json
在哪里 .我希望这会有所帮助 .
对于那些寻找也适用于服务器端的安全 client-side 解决方案的人来说,有genversion . 它是一个命令行工具,从最近的package.json读取版本,并生成可导入的CommonJS模块文件,用于导出该版本 . 免责声明:我是维护者 .
我承认客户端安全不是OP的主要目的,但正如Mark Wallace和aug的答案中所讨论的那样,它具有高度相关性,也是我发现此问答的原因 .
只是添加一个答案,因为我来到这个问题,看看在我的Web应用程序中包含package.json版本的最佳方法 .
我知道这个问题是针对Node.js的,但是,如果您使用Webpack捆绑您的应用程序只是提醒,推荐的方法是使用DefinePlugin在配置中声明一个全局版本并引用它 . 所以你可以在你的
webpack.config.json
然后
AppVersion
现在是一个可供您使用的全局 . 还要确保.eslintrc you ignore this via the globals prop将
package.json
文件导入server.js
或app.js
,然后将package.json属性访问到服务器文件中 .package变量包含package.json中的所有数据 .
您可以使用project-version包 .
然后
如果由于某种原因缺少env var,它会使用
process.env.npm_package_version
但回退在package.json
中编写的版本 .或者在普通的旧壳中:
这可以缩短为
即使这不是问题所针对的问题,如果您想在
package.json
中使用该版本,例如登录script
中的版本化文件,它也很有用:我发现以下代码片段对我来说效果最好 . 由于它使用'require'来加载package.json,因此无论当前工作目录如何,它都可以工作 .
由@Pathogen提供的警告:
以下是如何从package.json中读取版本:
如果你的应用程序是使用'npm start'启动的,你可以简单地使用:
有关详细信息,请参阅package.json vars .
使用ES6模块,您可以执行以下操作:
正确的答案将在这里举例:
package.json
文件并获取版本)const { version } = require('./package.json');
const version = process.env.npm_package_version
请不要使用
JSON.parse
,fs.readFile
,fs.readFileSync
并且不要使用其他npm modules
这个问题没有必要 .我制作了一个有用的代码来获取父模块的package.json
我这样做findup-sync:
我知道这不是OP的意图,但我必须这样做,所以希望它能帮助下一个人 .
如果你正在使用docker-compose进行CI / CD过程,你可以这样做!
对于图像,您可以使用任何节点图像 . 我使用阿尔卑斯山,因为它是最小的 .