有没有方法在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
当前回答
如果使用rollup,可以使用rollup插件替换插件来添加版本,而无需向客户端公开package.json。
// rollup.config.js
import pkg from './package.json';
import { terser } from "rollup-plugin-terser";
import resolve from 'rollup-plugin-node-resolve';
import commonJS from 'rollup-plugin-commonjs'
import replace from 'rollup-plugin-replace';
export default {
plugins: [
replace({
exclude: 'node_modules/**',
'MY_PACKAGE_JSON_VERSION': pkg.version, // will replace 'MY_PACKAGE_JSON_VERSION' with package.json version throughout source code
}),
]
};
然后,在源代码中,您可以在任何需要package.json版本的地方使用字符串“MY_package_json_version”。
// src/index.js
export const packageVersion = 'MY_PACKAGE_JSON_VERSION' // replaced with actual version number in rollup.config.js
其他回答
我正在使用gitlab ci,并希望自动使用不同的版本来标记我的docker图像并推送它们。现在,它们的默认docker图像不包含节点,所以我的版本仅在shell中执行此操作
scripts/getCurrentVersion.sh
BASEDIR=$(dirname $0)
cat $BASEDIR/../package.json | grep '"version"' | head -n 1 | awk '{print $2}' | sed 's/"//g; s/,//g'
现在,它的作用是
打印您的包json搜索带有“版本”的行只取第一个结果替换“和,
请注意,我的脚本位于存储库中具有相应名称的子文件夹中。因此,如果您不更改$BASEDIR//package.json到$BASEDIR/package.json
或者如果你想获得主要、次要和补丁版本,我会使用这个
scripts/getCurrentVersion.sh
VERSION_TYPE=$1
BASEDIR=$(dirname $0)
VERSION=$(cat $BASEDIR/../package.json | grep '"version"' | head -n 1 | awk '{print $2}' | sed 's/"//g; s/,//g')
if [ $VERSION_TYPE = "major" ]; then
echo $(echo $VERSION | awk -F "." '{print $1}' )
elif [ $VERSION_TYPE = "minor" ]; then
echo $(echo $VERSION | awk -F "." '{print $1"."$2}' )
else
echo $VERSION
fi
如果您的版本是1.2.3,则采用这种方式。您的输出将如下所示
$ > sh ./getCurrentVersion.sh major
1
$> sh ./getCurrentVersion.sh minor
1.2
$> sh ./getCurrentVersion.sh
1.2.3
现在,您需要确保的唯一一件事是,您的包版本将是package.json中第一次使用密钥,否则您将得到错误的版本
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
将package.json文件导入server.js或app.js,然后将packaage.json财产访问到服务器文件中。
var package = require('./package.json');
package变量包含package.json中的所有数据。
如果您的应用程序是使用npm start启动的,您只需使用:
process.env.npm_package_version
有关详细信息,请参阅package.json vars。
选项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读取