

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護，並於 2023 年 6 月 1 日結束支援。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `cdk watch`
<a name="ref-cli-cmd-watch"></a>

持續監看本機 AWS CDK 專案的變更，以執行部署和熱交換。

此命令類似於 `cdk deploy`，但它可以透過單一命令執行連續部署和熱交換。

此命令是 的捷徑`cdk deploy --watch`。

若要結束`cdk watch`工作階段，請按 以中斷程序`Ctrl+C`。

觀察到的檔案取決於檔案中`"watch"`的設定`cdk.json`。它有兩個子索引鍵 `"include"`和 `"exclude"`，接受單一字串或字串陣列。每個項目都會解譯為相對於`cdk.json`檔案位置的路徑。`**` 接受 `*`和 兩者。

如果您使用 `cdk init`命令建立專案，則會`cdk watch`在專案的 `cdk.json` 檔案中為 設定下列預設行為：
+  `"include"` 設定為 `"**/*"`，其中包含專案根目錄中的所有檔案和目錄。
+  `"exclude"` 是選用的，但預設已忽略的檔案和資料夾除外。這包括以 `.`、CDK 輸出目錄和 `node_modules` 目錄開頭的檔案和目錄。

要設定的最小設定`watch`是 `"watch": {}`。

如果您的 CDK 程式碼或應用程式程式碼在部署之前需要建置步驟， `cdk watch` 會使用 `cdk.json` 檔案中的 `"build"`金鑰。

**重要**  
此命令適用於 CDK 應用程式開發階段的快速部署，不建議用於生產部署。

的相同限制`cdk deploy --hotswap`適用於 `cdk watch`。如需詳細資訊，請參閱` cdk deploy --hotswap `。

## Usage
<a name="ref-cli-cmd-watch-usage"></a>

```
$ cdk watch <arguments> <options>
```

## 引數
<a name="ref-cli-cmd-watch-args"></a><a name="ref-cli-cmd-watch-args-stack-name"></a>

 **CDK 堆疊 ID**   
要監看之應用程式中 CDK 堆疊的建構 ID。  
 *類型：*字串  
 *必要*：否

## 選項
<a name="ref-cli-cmd-watch-options"></a>

如需適用於所有 CDK CLI 命令的全域選項清單，請參閱[全域選項](ref-cli-cmd.md#ref-cli-cmd-options)。<a name="ref-cli-cmd-watch-options-build-exclude"></a>

 `--build-exclude, -E <ARRAY>`   
請勿以指定的 ID 重建資產。  
此選項可在單一命令中指定多次。  
 *預設值*：`[]`<a name="ref-cli-cmd-watch-options-change-set-name"></a>

 `--change-set-name <STRING>`   
要建立的 CloudFormation 變更集名稱。<a name="ref-cli-cmd-watch-options-concurrency"></a>

 `--concurrency <NUMBER>`   
平行部署和熱插拔多個堆疊，同時考慮堆疊間相依性。使用此選項可加速部署。您仍然必須將 CloudFormation 和其他 AWS 帳戶速率限制納入考量。  
提供數字以指定要同時執行的部署數目上限 （依存性允許）。  
 *預設值*：`1`<a name="ref-cli-cmd-watch-options-exclusively"></a>

 `--exclusively, -e <BOOLEAN>`   
僅部署請求的堆疊，不包含相依性。<a name="ref-cli-cmd-watch-options-force"></a>

 `--force, -f <BOOLEAN>`   
即使範本相同，也一律部署堆疊。  
 *預設值*：`false`<a name="ref-cli-cmd-watch-options-help"></a>

 `--help, -h <BOOLEAN>`   
顯示命令的`cdk watch`命令參考資訊。<a name="ref-cli-cmd-watch-options-hotswap"></a>

 `--hotswap <BOOLEAN>`   
根據預設， 會盡可能`cdk watch`使用熱插拔部署來更新您的資源。CDK CLI 將嘗試執行熱插拔部署，如果失敗，將不會回復到完整的 CloudFormation 部署。偵測到無法透過熱插拔更新的任何變更都會遭到忽略。  
 *預設值*：`true`<a name="ref-cli-cmd-watch-options-hotswap-fallback"></a>

 `--hotswap-fallback <BOOLEAN>`   
根據預設， `cdk watch`會嘗試執行熱插拔部署，並忽略需要 CloudFormation 部署的變更。如果熱插拔部署失敗，請提供 `--hotswap-fallback`以復原並執行完整的 CloudFormation 部署。<a name="ref-cli-cmd-watch-options-logs"></a>

 `--logs <BOOLEAN>`   
根據預設， 會`cdk watch`監控應用程式中的所有 CloudWatch 日誌群組，並將日誌事件本機串流至 `stdout`。  
 *預設值*：`true`<a name="ref-cli-cmd-watch-options-progress"></a>

 `--progress <STRING>`   
設定 CDK CLI 顯示部署進度的方式。  
+  `bar` – 將堆疊部署事件顯示為進度列，其中資源的事件目前正在部署。
+  `events` – 提供完整的歷史記錄，包括所有 CloudFormation 事件。
您也可以在專案的 `cdk.json` 檔案或本機開發機器`~/.cdk.json`的 中設定此選項：  

```
{
   "progress": "events"
}
```
 *有效值*：`bar`、`events`  
 *預設值*：`bar`<a name="ref-cli-cmd-watch-options-rollback"></a>

 `--rollback <BOOLEAN>`   
在部署期間，如果資源無法建立或更新，部署會在 CDK CLI 傳回之前回復至最新的穩定狀態。在該時間點之前所做的所有變更都會復原。系統會刪除已建立的資源，並復原所做的更新。  
使用 `--no-rollback`或 `-R` 停用此行為。如果資源無法建立或更新，CDK CLI 會保留到該時間點所做的變更並傳回。這在您快速迭代的開發環境中可能很有幫助。  
當 時`false`，造成資源取代的部署一律會失敗。您只能將此值用於更新或建立新資源的部署。
 *預設值*：`true`<a name="ref-cli-cmd-watch-options-toolkit-stack-name"></a>

 `--toolkit-stack-name <STRING>`   
現有 CDK Toolkit 堆疊的名稱。  
根據預設， 會將名為 `cdk bootstrap` 的堆疊部署`CDKToolkit`到指定的 AWS 環境中。使用此選項為您的引導堆疊提供不同的名稱。  
CDK CLI 使用此值來驗證您的引導堆疊版本。

## 範例
<a name="ref-cli-cmd-watch-examples"></a>

### 使用邏輯 ID DevelopmentStack 觀看 CDK 堆疊以進行變更
<a name="ref-cli-cmd-watch-examples-1"></a>

```
$ cdk watch DevelopmentStack
Detected change to 'lambda-code/index.js' (type: change). Triggering 'cdk deploy'
DevelopmentStack: deploying...

 ✅  DevelopmentStack
```

### 設定 cdk.json 檔案來包含和排除哪些變更
<a name="ref-cli-cmd-watch-examples-2"></a>

```
{
   "app": "mvn -e -q compile exec:java",
   "watch": {
    "include": "src/main/**",
    "exclude": "target/*"
   }
}
```

### 透過設定 cdk.json 檔案，在部署之前使用 Java 建置 CDK 專案
<a name="ref-cli-cmd-watch-examples-3"></a>

```
{
  "app": "mvn -e -q exec:java",
  "build": "mvn package",
  "watch": {
    "include": "src/main/**",
    "exclude": "target/*"
  }
}
```