我有一个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脚本-cmd
根本不理解date
命令。
以下解决方案将在跨平台(Windows,Linux,MacOS等)下运行:
首先date
到您的项目目录,然后通过运行以下命令来安装cd
软件包:
moment
我们将利用此程序包获取格式为npm i -D moment
的日期/时间。
然后在package.json的DD/MM/YYY HH:MM:SS
部分中重新定义versions
脚本,如下所示:
scripts
说明:
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
接下来我们获取日期。同样,我们利用nodejs命令行选项>
评估并打印以下嵌入式JavaScript的结果:
> ./public/version-npm.txt
日期值被重定向(
node -e \"console.log(require('./package.json').version);\"
)到文件,如下所示:
-p