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

时间:2020-06-03 13:03:30

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

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

1 个答案:

答案 0 :(得分:1)

为什么不起作用?

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

  • 但是,上述方法在Windows上不起作用,因为该操作系统上的npm使用sh作为运行npm脚本的默认外壳-cmd根本不了解{{3} }命令。


解决方案

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

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

    cd

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

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

    scripts

说明:

  1. npm脚本(上文)利用nodejs命令行选项moment评估并打印以下嵌入式JavaScript的结果:

    "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"
    }
    

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

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

    >

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

    > ./public/version-npm.txt
    

  2. 接下来我们获取日期。再次,我们使用nodejs命令行选项node -e \"console.log(require('./package.json').version);\" 评估并打印以下嵌入式JavaScript的结果:

    -p

    将日期值重定向(require('moment')().format('MM/DD/YYYY HH:mm:ss') )到文件,如下所示:

    >