【问题标题】:Extract package.json version using shell script使用 shell 脚本提取 package.json 版本
【发布时间】: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")

标签: node.js shell unix docker package.json


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2020-03-08
        • 2021-01-25
        • 2023-03-13
        • 1970-01-01
        • 2021-10-03
        • 2011-09-08
        • 2018-02-06
        • 2012-01-27
        • 2018-06-28
        相关资源
        最近更新 更多