如何在npm脚本中获取软件包的版本和日期?

问题描述 投票:1回答:1

我有一个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个回答
1
投票

为什么不起作用?

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

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


解决方案

以下解决方案将在跨平台(Windows,Linux,MacOS等)下运行:

  1. 首先date到您的项目目录,然后通过运行以下命令来安装cd软件包:

    moment

    我们将利用此程序包获取格式为npm i -D moment 的日期/时间。

  2. 然后在package.jsonDD/MM/YYY HH:MM:SS部分中重新定义versions脚本,如下所示:

    scripts

说明:

  1. npm脚本(上面)利用nodejs命令行选项"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" } 评估并打印以下嵌入式JavaScript的结果:

    -p

    这实际上是利用nodejs -p来读取npm创建的环境变量process.env.npm_package_version 。有关更多说明,请参见我的答案process.env

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

    npm_package_version

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

    here
  2. 接下来我们获取日期。同样,我们利用nodejs命令行选项>评估并打印以下嵌入式JavaScript的结果:

  3. > ./public/version-npm.txt
    

    日期值被重定向(node -e \"console.log(require('./package.json').version);\" )到文件,如下所示:

    -p
© www.soinside.com 2019 - 2024. All rights reserved.