我有一个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)\"
答案 0 :(得分:1)
获取日期的方式,即date +\"%d/%m/%Y %T\"
或类似地使用\"$(date)\"
在 * nix 平台上确实可以成功工作,因此npm利用{{1 }}默认运行npm脚本。
但是,上述方法在Windows上不起作用,因为该操作系统上的npm使用sh
作为运行npm脚本的默认外壳-cmd
根本不了解{{3} }命令。
以下解决方案可在跨平台(Windows,Linux,MacOS等)下运行:
首先cmd
到您的项目目录,然后通过运行以下命令来安装date
软件包:
cd
我们将利用此程序包获取格式为npm i -D moment
的日期/时间。
然后在 package.json 的DD/MM/YYY HH:MM:SS
部分中重新定义versions
脚本,如下所示:
scripts
说明:
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
接下来我们获取日期。再次,我们使用nodejs命令行选项node -e \"console.log(require('./package.json').version);\"
评估并打印以下嵌入式JavaScript的结果:
-p
将日期值重定向(require('moment')().format('MM/DD/YYYY HH:mm:ss')
)到文件,如下所示:
>