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

Sai*_*Sai 15 unix shell node.js docker package.json

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

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

rai*_*bba 22

归功于metakermit

NODE_VERSION=$(node -p -e "require('./package.json').version")
echo $NODE_VERSION
Run Code Online (Sandbox Code Playgroud)


Sai*_*Sai 11

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

  • 我不确定为什么这被否决了……这正是 OP 所要求的。也许您应该从链接中移动相关内容:`PKG_VERSION=\`node -p "require('./package.json').version"\`` (7认同)

Bre*_*tty 10

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

jq -r .version package.json
Run Code Online (Sandbox Code Playgroud)


Iur*_*kyi 8

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

sed 's/.*"version": "\(.*\)".*/\1/;t;d' ./package.json
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用:`grep version package.json | sed 's/.*"版本": "\(.*\)".*/\1/'` (3认同)

Pri*_*iya 6

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

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

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

echo $VERSION;
Run Code Online (Sandbox Code Playgroud)