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

Posted

技术标签:

【中文标题】使用 shell 脚本提取 package.json 版本【英文标题】:Extract package.json version using shell script 【发布时间】:2017-12-03 15:10:20 【问题描述】:

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

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

【问题讨论】:

附带说明,使用节点本身获取版本的更简洁的方法是VERSION=$(node -p -e "require('./package.json').version") 【参考方案1】:

这样你可以使用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;

【讨论】:

【参考方案2】:

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

jq -r .version package.json

【讨论】:

为了避免 uuoc(无用的 cat)你可以使用jq -r .version package.json【参考方案3】:

如果我了解您的目标,您正在尝试对您的工件(在您的情况下为 Docker 映像)进行版本控制。您是否打算每次签入时手动提升版本(在 package.json 中)?

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

【讨论】:

【参考方案4】:

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

【讨论】:

我不确定为什么这被否决了......这正是 OP 所要求的。也许您应该从链接中移走相关内容:PKG_VERSION=`node -p "require('./package.json').version"`【参考方案5】:

如果你真的想使用 shell 脚本,那就试试吧

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

【讨论】:

这对我有用:grep version package.json | sed 's/.*"version": "\(.*\)".*/\1/'【参考方案6】:

感谢metakermit

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

【讨论】:

以上是关于使用 shell 脚本提取 package.json 版本的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本如何提取整数部分

使用shell脚本命令从文本中提取UUID字符串。

使用bash shell脚本从文件中查找和提取特定字符串后的值?

shell脚本3

用于从文本文件中提取数据的 Shell 脚本

用于从文本日志文件中提取/检索值的 Shell 脚本(sqlcode 字段值)