我有一个 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 等):
首先
cd
到您的项目目录并安装 moment运行以下命令进行打包:npm i -D moment
我们将利用此包来获取格式为
DD/MM/YYY HH:MM:SS
的日期/时间。然后在 package.json 的
scripts
部分中重新定义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" }
说明:
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);\"
接下来我们获取日期。我们再次利用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/