
Nx 升级至 16.7.4 后 nx show projects 返回空白,根本原因常是 .ignore、.gitignore 等文件意外屏蔽了 project.json 或 *.json,导致 Nx 扫描失败;需同步排查项目根目录及用户主目录下的所有忽略规则。
nx 升级至 16.7.4 后 `nx show projects` 返回空白,根本原因常是 `.ignore`、`.gitignore` 等文件意外屏蔽了 `project.json` 或 `*.json`,导致 nx 扫描失败;需同步排查项目根目录及用户主目录下的所有忽略规则。
Nx 自 v16.6.0 起显著强化了对忽略文件(如 .gitignore、.ignore、.npmignore)的解析逻辑,会严格跳过被匹配路径下的项目配置文件(尤其是 project.json)。这意味着:*只要任意生效的忽略规则命中 project.json、`.json或package.json,Nx 就会静默跳过整个项目目录**——不报错、不警告,仅表现为nx show projects` 输出为空、IDE 无法识别项目、生成/构建命令失效。
? 快速定位问题
执行以下命令,确认 Nx 实际扫描路径是否被干扰:
# 查看 Nx 当前工作区根路径(确保在正确目录) nx workspace-root # 显示 Nx 解析时使用的全部忽略源(含全局路径) NX_VERBOSE=1 nx show projects 2>&1 | grep -i "ignor\|scan"
重点关注输出中是否出现类似 Ignoring directory ... due to pattern 'project.json' 的提示(v16.7+ 已增强日志粒度)。
? 常见“罪魁祸首”文件位置(按优先级检查)
| 文件路径 | 说明 | 风险示例 |
|---|---|---|
| ./.gitignore(项目根) | 最常见来源,误加 *.json 或 project.json | echo "project.json" >> .gitignore |
| ~/.gitignore_global(Git 全局) | git config --global core.excludesfile 指向的文件 | 包含 *.json 通配符 |
| ~/.ignore(Ripgrep / fd / IDE 通用) | macOS 上常由 IntelliJ、VS Code 插件或 CLI 工具自动生成 | 内容含 project.json 或 **/*.json |
| ./.npmignore / ./.yarnrc.yml(若启用 nodeLinker: node-modules) | 少见但存在影响 |
✅ 验证方法:临时重命名可疑文件(如 mv ~/.ignore ~/.ignore.bak),再运行 nx show projects。若恢复识别,即定位成功。
✅ 正确修复步骤
-
清理高危模式:
删除或注释掉所有忽略文件中针对 JSON 配置的泛化规则:# ❌ 危险(禁止) *.json project.json package.json # ✅ 安全(推荐) # 仅忽略构建产物或敏感文件 dist/ node_modules/ .env.local
-
显式声明项目入口(可选加固):
在 nx.json 中明确指定项目发现策略,避免依赖隐式扫描:{ "workspaceLayout": { "appsDir": "apps", "libsDir": "libs" }, "affected": { "defaultBase": "main" } }⚠️ 注意:Nx 16+ 默认仍使用 project.json 文件发现机制,workspaceLayout 仅辅助路径推导,不能替代忽略规则修复。
-
彻底清理缓存并验证:
# 清除 Nx 缓存(含项目图缓存) nx reset # 清除 Yarn 缓存(尤其 Yarn 3+) yarn cache clean # 重新生成锁文件(谨慎操作,建议先备份) rm -f yarn.lock && yarn install # 最终验证 nx show projects --all # --all 强制显示所有已解析项目
? 总结与最佳实践
- 根本原则:Nx 项目发现高度依赖 project.json 的可读性,任何阻止其被 fs 读取的忽略规则都会导致“失联”。
- 环境意识:M1 Mac + asdf + Yarn 3 组合下,IDE(如 IntelliJ)可能在用户目录写入 ~/.ignore,此类文件极易被忽视。
-
升级前 Checklist:
- 运行 git status --ignored 检查是否意外忽略了 project.json;
- 使用 rg -u -g '!project.json' --files | head -5 验证 project.json 是否在搜索结果中;
- 升级后立即执行 nx graph --watch,可视化验证项目图是否完整。
遵循以上流程,90% 以上的 “Nx 升级后项目消失” 问题可在 5 分钟内定位并解决。记住:不是 Nx 坏了,而是你的忽略规则太“努力”了。










