在佈署 Angular 專案的時候為了能夠快速複製到遠端主機上,所以通常會 ng build 後,將 build 出來的檔案壓縮,要完成這一連串的流程,通常都是寫 cmd 來處理。

使用 PowerShell 壓縮資料夾

命令提示字元預設是沒有將資料夾壓縮的功能,所以我這邊使用 PowerShell 幫我處理壓縮檔案。

  1. 建立 zip.ps1 檔案
  2. 貼上底下的程式碼。 記得修改$source與$destination的路徑
    zip.ps1
    • ps1
    1
    2
    3
    4
    5
    $source = "D:\Projects\Publish\Today_Deploy"
    $destination = "D:\Projects\Publish\Today_Deploy.zip"
    If(Test-path $destination) {Remove-item $destination}
    Add-Type -assembly "system.io.compression.filesystem"
    [io.compression.zipfile]::CreateFromDirectory($source,$destination)

之後命令提示字元只要使用 PowerShell 呼叫這個 script 檔案,就可以將檔案壓縮。
Powershell.exe -executionpolicy remotesigned -File D:\Projects\zip.ps1

結合 ng build 與壓縮指令

建立一個 deploy.bat 檔案,貼上底下的指令

  1. 將路徑指定到 Angular 的根目錄
  2. 執行 ng build 並將輸出到 F2E 資料夾
  3. 執行壓縮
deploy.bat
  • bat
1
2
3
4
5
cd /d D:\Projects\Trapac_Web_Payment\TraPacWebPayment.F2EWeb

ng build --prod --output-path=D:\Projects\Publish\Today_Deploy\F2E

Powershell.exe -executionpolicy remotesigned -File D:\Projects\zip.ps1

結果:事情不會這麼順利的 !!!!

ng build 後,會把命令提示字元關掉,會造成第3行壓縮指令沒有執行 !!!

拆成 3 個 bat,讓後續指令能繼續進行

  1. 建立 build.bat 貼上前 2 行指令

    build.bat
    • bat
    1
    2
    3
    cd /d D:\Projects\Trapac_Web_Payment\TraPacWebPayment.F2EWeb

    ng build --prod --output-path=D:\Projects\Publish\Today_Deploy\F2E
  2. 建立 zip.bat 貼上第 3 行指令

    zip.bat
    • bat
    1
    Powershell.exe -executionpolicy remotesigned -File  D:\Projects\zip.ps1
  3. 修改 deploy.bat ,呼叫 build.bat 與 zip.bat

    deploy.bat
    • bat
    1
    2
    3
    call D:\Projects\build.bat

    call D:\Projects\zip.bat
  4. 執行 deploy.bat,用這種方式,就順利讓 ng build 之後還可以持續執行指令

小結

目前就自己研究出這種方式,可以讓 ng build 後,可持續執行後面的指令,如果讀者還有更好的方式,歡迎告知。

參考

use-powershell-to-create-zip