使用 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 版本的主要内容,如果未能解决你的问题,请参考以下文章