【问题标题】:How do I get current package's version using only npm如何仅使用 npm 获取当前包的版本
【发布时间】:2019-05-07 07:58:23
【问题描述】:

如何使用 npm 从 package.json 获取当前版本?

我知道npm version 将输出我的包的版本以及 npm 和其他依赖项。但我需要一个简短的命令来仅获取我的包版本以在 CI 上使用。所以理想情况下,没有额外的输入,因为 CI 不知道它正在处理什么项目。

npm version from-git --allow-same-version 也可以工作,如果它没有尝试在 Git 上标记新版本。

【问题讨论】:

  • 您需要使用 npm 脚本或 nodejs 脚本,因为 npm 不提供直接命令来实现此目的。请参阅我的回答 here,它指示如何引用 npm 的名为 npm_package_version 的内置变量以从 package.json 检索当前版本。

标签: node.js npm


【解决方案1】:

使用 npm:

npm -s run env echo '$npm_package_version'

来自 npm v7.2:

npm pkg get version

【讨论】:

  • 这些命令还可以很容易地获取其他包属性,例如namenpm -s run env echo '$npm_package_name'npm pkg get name。请注意,npm pkg get 命令返回值包括引号。
【解决方案2】:

如果您的项目由 git 支持并且您让 npm version 标记您的构建,您可能可以利用 git describe

echo The current build is \"`git describe`\". 
==> The current build is "v0.0.2".

技术上不是使用npm 来获取版本,但这是我在尝试找到一个“真正的”基于npm 的解决方案并找到这个 SO 后最终使用的很清楚没有可用的干净命令。

【讨论】:

    【解决方案3】:

    没有直接的 npm 命令只显示你的包版本,但你可以从你的项目文件夹中使用这个 hack:

    node -e "console.log(require('./package.json').version);"
    

    如果您想使用 npm 命令,可以将其包装到 package.json 文件中的“脚本”中:

    "scripts": {
        "version": "node -e console.log(require('./package.json').version);"
    }
    

    现在您可以启动 npm run version 来获取您的软件包版本

    【讨论】:

    【解决方案4】:

    以 Kaz 的回答为基础,这稍微短一些。

    PACKAGE_VERSION=`node -p "require('./package.json').version"`
    

    【讨论】:

      【解决方案5】:

      如果使用grepsed 对您来说不是问题,那么这对我来说非常有用:

      VERSION_NUMBER=$(npm version | grep @ | sed -re "s/\{ '.*': '(.*)',?/\1/g")
      

      解释:

      • npm version 为您提供所有信息
      • grep @ 捕捉到您拥有版本的行
      • sed -re "s/\{ '.*': '(.*)',?/\1/g" 仅用版本号替换文本

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 2022-08-14
        • 1970-01-01
        • 1970-01-01
        • 2014-01-27
        • 2018-09-27
        • 2013-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多