【问题标题】:Write input of a npm command to a variable but only a specific part将 npm 命令的输入写入变量,但仅写入特定部分
【发布时间】:2020-12-01 03:36:28
【问题描述】:

在我的项目的根目录中,我有一个 package.json。在进行 CI 构建时,我试图从文件中捕获版本属性。由于我在节点容器上运行,所以可以使用以下命令。

node -p -e require('./package.json').version

我在 package.json 的 scripts 属性中包含了上述内容

  "scripts": {
     "version": "node -p -e require('./package.json').version"
   },

我正在使用变量将其捕获

export VERSION=$(npm run version)

这似乎比 npm 命令捕获的结果要多得多。构建环境是一个基于rhel7构建的Nodejs10容器。

jq 不可用,没有它可能会更好

有什么建议吗?

【问题讨论】:

  • 1) 将您的 npm 脚本更改为:"version": "node -p \"require('./package.json').version\"" - -e 选项不是必需的,要评估的 js 也必须作为字符串传递。请注意,它被包含在 JSON 转义双引号中,即\"2) 也可以使用以下代码捕获并导出它; export VERSION=$(npm run version -s) - 注意额外的 -s 选项(这是 --silent 的简写) - 这确保您只捕获版本(例如 1.0.0)而不是额外的 npm 日志信息。
  • 感谢 RobC。正是我想要的。您可以将其发布为答案,我会接受它

标签: node.js bash npm rhel npm-scripts


【解决方案1】:

packege.json 可以使用以下模式引用自身

$npm_package_PROP[_SUB_PROP][_SUB_SUB_PROP]

  "version": "1.0.0",
  "scripts": {
    ...
    "version": "echo $npm_package_version"
  },
npm run version # output: 1.0.0

【讨论】:

  • 你使用的 NPM 版本是什么?
【解决方案2】:
  1. 将您的 npm 脚本更改为:

    "scripts": {
      "version": "node -p \"require('./package.json').version\""
    }
    

    -e 选项不是必需的,要评估的 JavaScript 也必须作为字符串传递。请注意,它被包含在 JSON 转义双引号中,即 \"

  2. 也可以使用以下代码捕获并导出它:

    export VERSION=$(npm run version -s)
    

    注意额外的 -s 选项(这是 --silent 的简写) - 这可以确保您只捕获版本(例如 1.0.0)而不是额外的 npm 日志信息。

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2014-02-26
    相关资源
    最近更新 更多