簡體   English   中英

如何在 npm 腳本中獲取 package 版本和日期?

[英]How to fetch package version and date in npm script?

我有一個 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平台上成功運行, sh通過默認運行 npm 腳本。

  • However, the aforementioned method does not work on Windows because npm on that OS cmd as the default shell to run npm scripts - cmd simply does not understand the date command.


解決方案

以下解決方案適用於跨平台(Windows、Linux、MacOS 等):

  1. 首先cd到您的項目目錄並通過運行以下命令安裝時刻package:

     npm i -D moment

    我們將利用這個 package 來獲取格式為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 在此處查看我的答案以獲取更多說明。

    然后使用與您嘗試相同的方法將版本重定向 ( > ) 到文件:

     >./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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM