gpt4 book ai didi

node.js - 如何在 npm 脚本中获取包版本和日期?

转载 作者:行者123 更新时间:2023-12-04 09:44:58 25 4
gpt4 key购买 nike

我有一个 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)\"

最佳答案

为什么它不起作用?

  • 您获取日期的方式,即 date +\"%d/%m/%Y %T\"或类似地使用 \"$(date)\"在 *nix 平台上确实可以成功运行,因此 npm 利用 sh默认运行 npm 脚本。
  • 但是,上述方法在 Windows 上不起作用,因为该操作系统上的 npm 使用 cmd作为运行 npm 脚本的默认 shell - cmd简直不懂 date 命令。

  • 解决方案
    以下解决方案将适用于跨平台(Windows、Linux、MacOS 等):
  • 首先cd到您的项目目录并安装 moment通过运行以下命令打包:
    npm i -D moment
    我们将利用这个包来获取格式为 DD/MM/YYY HH:MM:SS 的日期/时间.
  • 然后重新定义你的versions scripts 中的脚本package.json 的部分如下:
    "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"
    }

  • 说明:
  • npm 脚本(上图)使用 nodejs 命令行选项 -p 评估和打印以下内联 JavaScript 的结果:
    process.env.npm_package_version
    这实质上利用了 nodejs process.env 读取环境变量 npm_package_version npm 创建的。看我的回答 here作进一步解释。
    然后使用与您尝试相同的方法将版本重定向 ( > ) 到文件:
    > ./public/version-npm.txt

    备注 :如果您愿意,您可以继续使用当前的、更详细的解决方案从 package.json 获取版本,即
    node -e \"console.log(require('./package.json').version);\"

  • 接下来我们获取日期。我们再次使用 nodejs 命令行选项 -p评估和打印以下内联 JavaScript 的结果:
    require('moment')().format('MM/DD/YYYY HH:mm:ss')
    日期值被重定向 ( > ) 到文件,如下所示:
    > ./public/version.txt
  • 关于node.js - 如何在 npm 脚本中获取包版本和日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62173516/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com