
Nx 升级至 16.7.4 后 nx show projects 返回空白,通常并非缓存或版本兼容性问题,而是因全局或项目级忽略文件(如 .ignore、.gitignore)误将 project.json 或 package.json 纳入排除规则,导致 Nx 扫描失败。
nx 升级至 16.7.4 后 `nx show projects` 返回空白,通常并非缓存或版本兼容性问题,而是因全局或项目级忽略文件(如 `.ignore`、`.gitignore`)误将 `project.json` 或 `package.json` 纳入排除规则,导致 nx 扫描失败。
Nx 自 v16.6.0 起显著加强了对文件系统忽略规则的尊重——它不再仅读取 .gitignore,还会主动识别并遵循各类常见忽略文件(如 .ignore、.npmignore、甚至某些 IDE 生成的隐藏忽略配置)。这意味着:*只要任意被 Nx 加载的忽略文件中包含 project.json、package.json 或通配符 `.json`,Nx 就会跳过对应目录,从而完全无法发现项目定义**。
该行为在旧版(如 15.9.2)中并不存在,因此回退版本能“临时修复”,但本质是掩盖了配置风险。
? 快速诊断步骤
执行以下命令,定位潜在的忽略源:
# 检查项目根目录及所有父级目录(含 ~)
find . ~ -maxdepth 3 -name ".ignore" -o -name ".gitignore" -o -name ".npmignore" 2>/dev/null | xargs -I{} sh -c 'echo "\n=== {} ==="; grep -E "project\.json|package\.json|\*.json" {}'
# 特别注意 macOS 用户:检查 ~/ 目录下是否意外存在 .ignore(常见于 IntelliJ/Solargraph 插件生成)
ls -la ~ | grep "\.ignore"
✅ 解决方案
-
删除或修正违规条目:
打开所有匹配的忽略文件,移除以下任一内容:project.json package.json *.json
⚠️ 注意:*.json 是高危通配符——Nx 依赖 project.json 定义项目元数据,一旦被忽略,整个项目树将不可见。
-
验证修复效果:
清理轻量级缓存(无需删 node_modules 或 yarn.lock):nx reset # 或手动清除 rm -rf .nx/cache
然后运行:
nx show projects --all # --all 强制扫描,便于调试
-
预防建议:
- 避免在共享忽略文件中使用宽泛规则(如 *.json);如需忽略特定 JSON 文件,请显式列出(如 secrets.json);
- 在 CI/CD 或团队环境中,通过 .prettierignore 或 .eslintignore 等专用文件管理格式化/检查工具的忽略逻辑,切勿混用到构建/项目发现流程中;
- 升级 Nx 前,查阅 Nx Release Notes 中关于“file discovery”或“ignore behavior”的变更说明。
? 补充说明
- 此问题与 yarn 版本(3.6.1)、Node(16.19.1)或 asdf 环境无关,属 Nx 自身扫描策略演进所致;
- nx migrate latest 不会自动修正忽略文件——它仅处理代码迁移和配置升级,开发者需主动审计工程元数据可见性;
- 若仍无效,可启用 Nx 调试日志进一步追踪:
NX_VERBOSE_LOGGING=1 nx show projects 2>&1 | grep -i "ignore\|scan\|project.json"
从根本上说,Nx 的“更严格忽略”设计提升了确定性与安全性,但要求开发者对工程配置的边界有更清晰的认知。一次精准的 .ignore 清理,往往比反复重装依赖更高效、更可靠。










