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

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

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

当我运行该命令时,它会生成 version-npm.txt ,其中包含保存当前版本的正确数据,但 version.txt 文件是使用确切的脚本生成的,它包含 日期+“%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 作为默认 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 - 如何在 npm 脚本中获取包版本和日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62173516/

相关文章:

node.js - Azure Node expressjs应用程序随机崩溃,没有错误

docker - docker中的vue pwa - 找不到模块 'chalk'

javascript - Angular - ng-tags-input。 "angular is not defined"

javascript - 无法从全新安装在 npm 上运行脚本

reactjs - 将主页设置为 package.json 中的变量并使其有条件地更改

javascript - 创建后是否可以将 Express Session 更改为其他商店

javascript - 如何在 Jest 中模拟 Mongoose 'find()' 函数?

node.js - 如何从 mongoDb 过滤最近 10 天的记录?

node.js - package.json 中定义的 Webpack Typescript 相对依赖关系

android - 如何在 React Native 中只为 iOs 或 Android 安装包