构建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
相关产品推荐
相关产品推荐

