重複使用現有應用程式
上次更新:2026/10/14QV2QS 可以指定現有的 Qlik Sense 應用程式,而不是在每次部署時建立新的應用程式,進而實現迭代開發並保留應用程式 ID。
預設情況下,QV2QS 會在每次部署時建立新的應用程式。改為指定現有應用程式,以就地更新應用程式並保留應用程式 ID。此方法支援疊代開發,並保留參照特定應用程式 ID 的書籤與連結。
有三個論點支持重複使用:
--appId APP_ID— 直接指定應用程式 ID。--appIdFile PATH— 從文字檔案的第一行讀取應用程式 ID。--reuseAppId— 從專案子資料夾中的cloud/cloud_state.json讀取應用程式 ID。此檔案會在每次部署後自動寫入。
cloud/cloud_state.json 檔案儲存在專案子資料夾中 (例如 <outputDir>/Sales/cloud/cloud_state.json)。此檔案記錄了應用程式 ID、媒體雜湊、工作表 ID 對應、來源檔案路徑以及時間戳記。--reuseAppId 旗標會自動讀取此檔案,因此後續執行會更新同一個應用程式,而無需手動輸入應用程式 ID。在批次模式下,--reuseAppId 會依專案運作——每個專案都會從其本身的輸出子資料夾讀取 cloud_state.json。
工作表 ID 對應
每個 QlikView 文件都會透過內部名稱 (例如 Document\SH01、Document\SH02 等) 來識別工作表。Qlik Sense 使用 UUID 來識別工作表。當 QV2QS 首次部署應用程式時,每個已轉換的工作表都會獲得新的 UUID。QV2QS 會將 QlikView 工作表名稱與 Qlik Sense UUID 之間的對應關係儲存在目標應用程式中,以便在各部署之間保留該關係。
在後續部署至相同應用程式時,QV2QS 會讀取儲存的對應關係,並將原始 Qlik Sense UUID 指派給相對應的已轉換工作表。此對應可防止複製工作表出現在應用程式中,並保留參照特定工作表 ID 的書籤、我的最愛和直接連結。
此對應儲存於兩個位置:
- 在 Qlik Cloud 應用程式內 — 應用程式內的專用物件包含該對應。如果應用程式移至不同空間或匯出為 QVF,對應會隨應用程式一起移動。
- 在本機專案資料夾中 —
cloud/cloud_state.json檔案包含相同對應的複本。--reuseAppId旗標會從此檔案讀取應用程式 ID 與對應。
QV2QS 在準備重新部署時,一律會從雲端應用程式(而非本機檔案)讀取對應。本機檔案便於 --reuseAppId 旗標尋找應用程式 ID。
媒體雜湊最佳化
QV2QS 會計算所有媒體檔案(工作表背景、物件背景、按鈕圖片)的雜湊值,並將該雜湊值與工作表對應一併儲存。在後續部署時,QV2QS 會比對目前的雜湊值與儲存的值。如果媒體未變更,則會完全略過上傳步驟。
對應驗證
在準備取代工作表之前,QV2QS 會對照實際運作的應用程式驗證已儲存的對應關係。如果在部署之間手動從 Qlik Cloud 應用程式刪除了工作表,QV2QS 會偵測到該工作表已不存在,從對應中移除過期項目,並在下一次組建時將對應的 QlikView 工作表視為新工作表。已更新的對應會在建置完成後寫回應用程式。
QlikView 來源中新增或移除的工作表
在初始部署後將工作表新增至 QlikView 來源時,QV2QS 會為該工作表指派新的 UUID,並將項目新增至對應。當工作表從 QlikView 來源移除時,該工作表將不再存在於建置輸出中,並會在建置期間從 Qlik Cloud 應用程式中移除。已移除工作表的對應項目不會沿用。
專案資料夾比對
QV2QS 在首次轉換後,會將 .qv2qs_source 標記檔案寫入每個專案輸出資料夾。此標記會記錄來源 QVW 檔案的完整路徑。在後續執行時,QV2QS 會使用該標記來找出指定 QVW 檔案的正確專案資料夾,即使有多個資料夾共用相同的基底名稱(例如 Sales/、Sales_2/、Sales_3/)。
此標記可確保每個 QVW 檔案恰好對應至一個輸出資料夾。轉換先前已轉換過的 QVW 檔案時,QV2QS 會在輸出根目錄中搜尋標記與來源路徑相符的子資料夾。若找到相符項目,QV2QS 會重複使用該資料夾並讀取其中的 cloud_state.json。若找不到相符項目,QV2QS 會建立帶有數字尾碼的新子資料夾。
在精靈中,適用相同的比對邏輯。啟用 重複使用現有應用程式 時,精靈會檢查輸出資料夾中是否有相符的專案,並自動從先前的部署填入 AppId 欄位。若找不到先前的部署,此欄位會保持空白,並接受手動輸入或瀏覽選擇器。
.qv2qs_source 標記檔案會自動建立。請勿編輯或刪除此檔案。移除標記會導致 QV2QS 在下次執行時建立新的專案子資料夾,而非重複使用現有的資料夾。
重新部署行為
QV2QS 使用 qlik app build 部署至目標應用程式。建置命令會完整取代應用程式物件模型。在組建輸出中定義的所有物件都會寫入應用程式。未出現在建置輸出中的物件將會被移除。
在執行組建之前,QV2QS 會準備現有工作表以進行取代。QV2QS 會根據即時應用程式驗證工作表對應 (請參閱 工作表 ID 對應),記錄每個工作表的發布狀態與排名,並從雲端應用程式中移除舊工作表。本機建置輸出會以原始 Qlik Sense 工作表 ID 進行修補,讓參照這些 ID 的書籤和連結在建置後仍可繼續運作。
建置完成後,QV2QS 會還原原始工作表狀態。先前已發佈的工作表會重新發佈為基礎工作表,並還原原始順位 (顯示順序)。啟用 發布工作表 設定時,先前部署中不存在的新工作表會發布為基礎工作表。停用此設定以讓新工作表保持未發布狀態。
目標應用程式中使用者建立的內容 (在上一次部署後手動新增的工作表、書籤、故事或自訂物件) 在重新部署期間不會保留。qlik app build 命令會以建置輸出取代應用程式內容。若已進行手動調整,請在重新部署前備份或發布應用程式。
部署前備份
重複使用現有應用程式時,QV2QS 會在修改應用程式之前自動匯出不含資料的 QVF 備份。備份會擷取不含資料的應用程式結構 (工作表、物件、載入指令碼和中繼資料),因此匯出速度快且檔案小。
備份會儲存至專案輸出資料夾內的 cloud/backups/。每個備份檔案皆命名為 <AppName>_<shortId>_<timestamp>_nodata.qvf。例如,Sales_a1b2c3d4_20260226-143025_nodata.qvf。
如果備份匯出失敗(例如因網路中斷或權限不足),QV2QS 會記錄警告並繼續進行部署。此失敗不會阻止轉換。
若要略過自動備份,請在命令列傳遞 --noBackup,或在精靈中啟用 略過部署前備份。在備份由外部管理的 CI/CD 管線中,略過備份非常實用。
保留目標應用程式載入指令碼
在預設情況下,QV2QS 會以來自 QlikView 來源的已轉換載入指令碼取代目標應用程式中的載入指令碼。使用 --preserveTargetAppScript 以保留目標應用程式中現有的載入指令碼不變。已轉換的載入指令碼會寫入至本機 build/script.qvs 檔案,但不會套用至雲端應用程式。
此選項需要 --appId 或 --reuseAppId,因為它僅適用於以現有應用程式為目標時。它可以與 --reload 結合,以在更新 UI 後執行現有指令碼,這在目標應用程式已具備運作正常的 Qlik Cloud 資料連線時非常實用。它也可以與 --autoBinary 結合,以暫時從原始 QVW 檔案載入資料,同時保持目標指令碼完整。
保留目標應用程式變數
依預設,QV2QS 會以來自 QlikView 來源的已轉換變數取代目標應用程式中的變數。使用 --preserveTargetAppVariables 可保留目標應用程式中的現有變數不變。轉換後的變數會寫入本機 variables.json 檔案,但不會套用至雲端應用程式。
此選項需要 --appId 或 --reuseAppId,因為它僅適用於以現有應用程式為目標時。其可與 --preserveTargetAppScript 結合,以完整保留目標應用程式的載入指令碼與變數。