【问题标题】:How to fetch package version and date in npm script?如何在 npm 脚本中获取包版本和日期?
【发布时间】:2020-09-22 04:35:39
【问题描述】:

我有一个 package.json 文件,我有这个脚本来创建 2 个单独的文件,一个用于版本,另一个用于日期。

当我运行该命令时,它会生成 version-npm.txt,其中包含保存当前版本的正确数据,但 version.txt 文件是使用确切的脚本生成的,它包含 date +"%d/%m/%Y %T"

"scripts": {
    "versions": "node -e \"console.log(require('./package.json').version);\" > ./public/version-npm.txt && echo `date +\"%d/%m/%Y %T\"` > ./public/version.txt" 
}

我需要将其更新为当前日期和时间。有没有其他方法或者你能帮我解决它吗?

我尝试将日期写为\"$(date)\" 仍然相同,现在我得到\"$(date)\"

【问题讨论】:

    标签: node.js npm package.json npm-scripts


    【解决方案1】:

    为什么它不起作用?

    • 您获取日期的方式,即date +\"%d/%m/%Y %T\" 或类似地使用\"$(date)\"*nix 平台上确实可以成功运行,npm 默认使用sh 来运行npm 脚本。

    • 但是,上述方法在 Windows 上不起作用,因为该操作系统上的 npm 使用 cmd 作为默认 shell 来运行 npm 脚本 - cmd 根本不理解 date 命令。


    解决方案

    以下解决方案适用于跨平台(Windows、Linux、MacOS 等):

    1. 首先cd 到你的项目目录并通过运行以下命令安装moment 包:

      npm i -D moment
      

      我们将利用这个包来获取格式为DD/MM/YYY HH:MM:SS的日期/时间。

    2. 然后在 package.jsonscripts 部分重新定义 versions 脚本,如下所示:

      "scripts": {
        "versions": "node -p \"process.env.npm_package_version\" > ./public/version-npm.txt && node -p \"require('moment')().format('MM/DD/YYYY HH:mm:ss')\" > ./public/version.txt"
      }
      

    说明:

    1. npm 脚本(上图)利用 nodejs 命令行选项 -p 评估并打印以下内联 JavaScript 的结果:

      process.env.npm_package_version
      

      这实质上是利用 nodejs process.env 来读取 npm 创建的环境变量 npm_package_version。请参阅我的回答 here 以获得进一步的解释。

      然后使用与您尝试相同的方法将版本重定向 (>) 到文件:

      > ./public/version-npm.txt
      

      注意:如果您愿意,可以继续使用当前的、更详细的解决方案从 package.json 获取版本,即

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

    2. 接下来我们获取日期。我们再次使用 nodejs 命令行选项 -p 来评估和打印以下内联 JavaScript 的结果:

      require('moment')().format('MM/DD/YYYY HH:mm:ss')
      

      日期值被重定向 (>) 到文件,如下所示:

      > ./public/version.txt
      

    【讨论】:

    • 注意:如果您使用的是早期版本的 node.js,那么您可能会遇到 moment 错误。在这种情况下,请安装早期版本。例如运行 npm i -D moment@1.7.2 而不是 npm i -D moment
    • 非常感谢,它有效,你解释得很好:)
    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 2018-07-14
    • 2022-08-14
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2019-09-06
    相关资源
    最近更新 更多