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

如何在NX v16.1.4+中手动生成含哈希的files数组?

问题描述

我使用NX v16.1.4版本时,每次构建都会生成node_modules/.cache/nx/nxdeps.json文件,该文件结构与nx graph生成的文件不同。但16.1之后的版本不再生成此文件——此前该文件中nodes.<app/lib>.data.files字段包含带哈希值的完整文件数组,示例结构如下:

"data-access-anything": {
  "name": "data-access-anything",
  "type": "lib",
  "data": {
    "name": "data-access-anything",
    "$schema": "../../../../node_modules/nx/schemas/project-schema.json",
    "sourceRoot": "libs/data-access/anything/src",
    "projectType": "library",
    "files": [ // 需要这个files数组
      {
        "file": "libs/data-access/anything/.babelrc",
        "hash": "2685020516260856122"
      },
      {
        "file": "libs/data-access/anything/.eslintrc.json",
        "hash": "15754961097349354736"
      },
      // ...
    ]
  }
},

我之前通过分析Git日志,利用这个files数组计算单个应用版本,确定每次Git提交影响的库和应用。现在最新版本中该结构已变更,请问能否手动生成这个files数组的内容?

解决方案

可以通过以下几种方式手动生成带哈希值的项目文件数组:

  • 利用NX内置哈希工具编写脚本
    NX内置了文件哈希计算能力,可编写Node.js脚本实现:

    1. 引入NX哈希模块:const { calculateHashForFiles } = require('nx/src/utils/hash');
    2. 通过NX的getProjectFiles方法获取目标项目的所有关联文件,或用fs模块递归读取项目目录
    3. 对每个文件调用哈希计算方法,最终整理成{file: 文件路径, hash: 哈希值}的数组结构
  • 结合Git与哈希工具实现
    若只需跟踪Git提交变更的文件,可按以下步骤操作:

    1. 执行git diff --name-only <commit-id-1> <commit-id-2>获取两次提交间的变更文件列表
    2. 用Node.js的crypto模块或系统工具sha256sum计算每个文件的哈希值
    3. 将文件与对应NX项目关联,生成符合格式的files数组
  • 复用NX内部缓存逻辑
    NX新版本的缓存机制仍会计算文件哈希,可执行nx show project <project-name> --json获取项目基础信息,再通过NX内部缓存API提取哈希数据。注意:此方法依赖未公开的内部API,可能随版本更新失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:40:09