星期三, 5月 18, 2016

自動更新的 IIS / IIS Express 網站建置時戳

在網站開發期,由於要經常建置、部署、測試,常會有一個困擾,那就是「不容易識別目前在執行的網站版本」。如果有個政策是「每次部署都人工修改頁面上的版本資訊」固然可以,但難保不會忘了做。
為了解決這種問題,我的做法是在首頁引入以下的檔案:
  • <script src="lastBuild.js"></script>
並且在頁尾安排顯示的位置,
  • <div id="lastBuild"></div>
當頁面載入時,更新內容:
  • <script>
  •     $(function () {
  •         $("#lastBuild").text("lastBuild: " + lastBuild);
  •     });
  • </script>
重點是 lastBuild.js 的內容,藉由 Visual Studio 編輯 Pre-build event command line 動態產生,指令為:
  • set output=../lastBuild.js
  • echo | set /p dummy = "var lastBuild = '" > %output%
  • FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set D=%%a
  • set timestamp=%D:~0,4%/%D:~4,2%/%D:~6,2%T%D:~8,2%:%D:~10,2%:%D:~12,2%';
  • echo | set /p dummy = %timestamp% >> %output%
有些值得說明的地方,例如第 1 行定義產檔位置在上層目錄(否則可能預設在 bin\);第 2, 5 行的 echo | set /p dummy = 而不是單純用 echo,為的是避免多餘的空行;第 3 行的 WMIC 指令用來取日期,若單純用 date 指令會受 Locale 影響年月日的順序,find "." 也是用來過濾掉多餘的其他行;第 4 行用來格式化時戳字串。如此在每次建置時,產生出來的 lastBuild.js 內容就會像這樣:
  • var lastBuild = '2016/05/18T17:09:15';
在頁尾的顯示會像這樣:
  • lastBuild: 2016/05/18T17:09:15

沒有留言:

張貼留言