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

构建TypeScript项目时遇Cannot read properties of undefined (reading 'projects')错误

解决NX Monorepo中TypeScript构建错误:Cannot read properties of undefined (reading 'projects')

问题描述

构建TypeScript项目时触发错误:

Cannot read properties of undefined (reading 'projects')

相关配置信息

子项目tsconfig.json

{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "rootDir": ".",
    "baseUrl": ".",
    "outDir": "dist",
    "target": "ES2020",
    "module": "ES2020",
    "lib": [
      "ES2020"
    ],
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "importHelpers": false,
    "moduleResolution": "node",
    "types": [
      "jest",
      "node"
    ],
    "resolveJsonModule": true,
    "allowJs": true,
    "checkJs": true,
    "declaration": false,
    "sourceMap": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": false,
    "noImplicitAny": false,
    "strictNullChecks": false,
    "strictFunctionTypes": false,
    "strictBindCallApply": true,
    "strictPropertyInitialization": false,
    "noImplicitThis": false,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": false,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": false,
    "skipLibCheck": true,
    "skipDefaultLibCheck": true
  },
  "include": [
    "./src/**/*.ts"
  ]
}

根目录tsconfig.base.json

{
  "compileOnSave": true,
  "compilerOptions": {
    "paths": {}
  },
  "ts-node": {
    "require": [
      "tsconfig-paths/register"
    ]
  },
  "exclude": [
    "components",
    "dist",
    "node_modules"
  ]
}

NX构建配置

"build": {
  "builder": "@nrwl/js:tsc",
  "outputs": [
    "{options.outputPath}"
  ],
  "options": {
    "outputPath": "packages/db-package/dist",
    "tsConfig": "packages/db-package/tsconfig.json",
    "main": "packages/db-package/src/index.ts",
    "assets": [
      "packages/db-package/*.md"
    ]
  }
}

解决思路

1. 对齐NX与依赖版本

这个错误多由NX核心、@nrwl/js、TypeScript版本不兼容导致:

  • 查看当前NX版本:nx --version
  • 核对package.json中@nrwl/js、typescript版本,确保和NX核心版本一致
  • 版本不一致时,执行统一升级:nx migrate latest,按终端提示完成后续迁移步骤

2. 补全根tsconfig.base.json的NX规范字段

NX需要根tsconfig.base.json包含projects字段来识别子项目:

  • 在根配置中添加projects字段,指定子项目的tsconfig路径,示例:
    "projects": {
      "db-package": "packages/db-package/tsconfig.json"
    }
    
  • 若自定义配置容易出错,可直接使用NX自动生成的标准tsconfig.base.json结构

3. 验证构建路径正确性

  • 检查build配置里的tsConfig、main、outputPath是否为NX根目录的相对正确路径
  • 确认子项目tsconfig.json的extends路径能正确指向根目录的tsconfig.base.json

4. 清理缓存后重新构建

NX缓存可能残留旧配置导致异常:

  • 清理NX全局缓存:nx reset
  • 删除子项目的dist目录:rm -rf packages/db-package/dist
  • 重新执行构建:nx build db-package

5. 排查ts-node配置冲突

根tsconfig.base.json中的ts-node配置可能干扰NX构建逻辑:

  • 暂时移除ts-node字段,重新构建测试是否解决问题
  • 若需保留ts-node,确保已安装对应依赖:npm install ts-node tsconfig-paths --save-dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:40:21