

这是 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` 中断进程。

观察到的文件由 `cdk.json` 文件中的 `"watch"` 设置决定。其有两个子键，`"include"` 和 `"exclude"`，接受单个字符串或字符串数组。每个条目都被解释为相对于 `cdk.json` 文件位置的路径。`*` 和 `**` 均可接受。

如果您使用 `cdk init` 命令创建项目，则会在项目的 `cdk.json` 文件 中为 `cdk watch` 配置以下默认行为：
+  `"include"` 设置为 `"**/*"`，其中包括项目根目录中的所有文件和目录。
+  `"exclude"` 为可选项，但默认忽略的文件和文件夹除外。这包括以 `.` 开头的文件和目录、CDK 输出目录和 `node_modules` 目录。

配置 `watch` 的最小设置为 `"watch": {}`。

如果您的 CDK 代码或应用程序代码需要在部署之前执行构建步骤，则 `cdk watch` 与 `cdk.json` 文件中的 `"build"` 键协同工作。

**重要**  
此命令用于在 CDK Apps 的开发阶段进行快速部署，不建议用于生产部署。

`cdk deploy --hotswap` 的相同限制也适用于 `cdk watch`。有关更多信息，请参阅 ` cdk deploy --hotswap `。

## 用法
<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>`   
并行部署和热交换多个堆栈，同时考虑堆栈间的依赖项。使用此选项可以加快部署速度。您仍必须 AWS 考虑 CloudFormation 和其他账户费率限制。  
提供一个数字来指定要执行的最大同时部署数（依赖项允许）。  
 *默认值*：`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`会尝试执行 hotswap 部署并忽略需要部署的更改。 CloudFormation 如果 hotswap CloudFormation 部署不成功，则提供`--hotswap-fallback`回退并执行完整部署。<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 堆栈的名称。  
默认情况下，`CDKToolkit`将名为的堆栈`cdk bootstrap`部署到指定 AWS 环境中。使用此选项可为引导堆栈提供不同的名称。  
CDK CLI 使用此值来验证引导堆栈版本。

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

### 查看带有逻辑 ID 的 CDK 堆栈是否有 DevelopmentStack 更改
<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/*"
  }
}
```