You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

依赖中TypeScript声明文件变更时NX未失效缓存的解决咨询

解决NX未识别d.ts变更触发下游重建的问题

核心原因

NX默认缓存哈希计算未将依赖包输出的.d.ts文件纳入下游项目的输入依赖,仅追踪JS产物变更,导致类型定义修改时下游项目仍复用旧缓存。

可行解决方案

1. 修正项目输出与输入依赖配置

在package-a的project.json中明确将.d.ts纳入构建输出,同时让package-b的构建任务显式依赖package-a的.d.ts文件:

  • 编辑packages/package-a/project.json:
{
  "targets": {
    "build": {
      "outputs": [
        "{projectRoot}/build",
        "{projectRoot}/build/**/*.d.ts"
      ]
    }
  }
}
  • 编辑packages/package-b/project.json:
{
  "targets": {
    "build": {
      "inputs": [
        "default",
        "^packages/package-a/build/**/*.d.ts"
      ]
    }
  }
}

若使用根目录nx.json全局配置,需确保项目路径匹配规则正确,避免路径匹配失效。

2. 自定义NX哈希计算规则

强制让NX在缓存哈希计算时纳入.d.ts文件变更,修改根目录nx.json:

{
  "tasksRunnerOptions": {
    "default": {
      "options": {
        "hashIncludes": [
          "**/*.d.ts"
        ]
      }
    }
  }
}

此配置会让所有项目的缓存哈希计算都考虑.d.ts文件的变更,依赖包类型定义修改后,下游项目哈希值会更新,从而触发重建。

3. 拆分类型生成与构建任务

将.d.ts生成拆分为独立任务,让下游项目构建依赖该任务:

  • 在package-a的project.json新增任务:
{
  "targets": {
    "emit-types": {
      "command": "tsc --emitDeclarationOnly",
      "outputs": ["{projectRoot}/build/**/*.d.ts"]
    },
    "build": {
      "dependsOn": ["emit-types"]
      // 原有构建配置
    }
  }
}
  • 在package-b的project.json配置依赖:
{
  "targets": {
    "build": {
      "dependsOn": ["^packages/package-a:emit-types"]
      // 原有输入输出配置
    }
  }
}

当package-a类型定义变更时,emit-types任务会重新执行,进而触发package-b的构建任务重新运行。

验证方法

修改package-a的.d.ts内容后,执行nx build package-b,观察控制台是否显示缓存失效提示并执行全新构建,同时确认package-b的类型检查是否触发并报错。

内容的提问来源于stack exchange,提问作者wdc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:22:24