繁体   English   中英

使用 shell 脚本提取 package.json 版本

[英]Extract package.json version using shell script

我试图从 build.sh 文件中提取 package.json 中版本字段的值。 有没有办法做到这一点? 看起来我可以使用下面的方法进行提取,但是如果我执行 build.sh 文件的节点在全局不可用怎么办,所以寻找一种通用方法来将 package.json 中的值精确到 build.sh 文件中。

VERSION=$(node -e "(function () { console.log(require('./package.json').version) })()")

如果你安装了jq ,那真的很简单:

jq -r .version package.json

所以我继续使用http://dailyraisin.com/read-json-value-in-bash/ 中的 readJson 函数,它完全符合我的需要

如果您真的想使用shell脚本,那么只需尝试一下

sed 's/.*"version": "\(.*\)".*/\1/;t;d' ./package.json

这样您就可以使用bash从 package.json 文件中获取版本

VERSION='';
re="\"(version)\": \"([^\"]*)\"";

while read -r l; do
    if [[ $l =~ $re ]]; then
        value="${BASH_REMATCH[2]}";
        VERSION="$value";
    fi
done < package.json;

echo $VERSION;

归功于 metakermit

NODE_VERSION=$(node -p -e "require('./package.json').version")
echo $NODE_VERSION

如果我了解您要去哪里,那么您正在尝试对您的工件(在您的情况下为 Docker 映像)进行版本控制。 您是否打算在每次签入时手动修改版本(在 package.json 中)?

相反,我建议您使用一些自动化解决方案,例如Nebula Release Plugin (In Java World) ,我不知道 nodejs 世界中存在任何类似的东西。 如果这些对您没有任何意义,请告诉我,我将删除此答案:)

使用 awk 的简单解决方案(默认安装 linux 和 mac)。

awk -F'"' '/"version": ".+"/{ print $4; exit; }' package.json

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM