如何在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脚本实现:- 引入NX哈希模块:
const { calculateHashForFiles } = require('nx/src/utils/hash'); - 通过NX的
getProjectFiles方法获取目标项目的所有关联文件,或用fs模块递归读取项目目录 - 对每个文件调用哈希计算方法,最终整理成
{file: 文件路径, hash: 哈希值}的数组结构
- 引入NX哈希模块:
结合Git与哈希工具实现
若只需跟踪Git提交变更的文件,可按以下步骤操作:- 执行
git diff --name-only <commit-id-1> <commit-id-2>获取两次提交间的变更文件列表 - 用Node.js的
crypto模块或系统工具sha256sum计算每个文件的哈希值 - 将文件与对应NX项目关联,生成符合格式的files数组
- 执行
复用NX内部缓存逻辑
NX新版本的缓存机制仍会计算文件哈希,可执行nx show project <project-name> --json获取项目基础信息,再通过NX内部缓存API提取哈希数据。注意:此方法依赖未公开的内部API,可能随版本更新失效。
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

