面试题答案
一键面试1. 项目结构
- 在Monorepo根目录创建一个专门存放共享类型声明的文件夹,例如
shared/types
。这样可以将共享类型集中管理,方便不同子项目引用。 - 每个子项目保持相对独立的目录结构,如
packages/sub - project - 1
、packages/sub - project - 2
等(以lerna或yarn workspaces常见的packages目录为例)。
2. 工具配置 - lerna或yarn workspaces
- lerna:
- 在根目录的
lerna.json
中,确保配置了正确的packages
路径,指向各个子项目的目录,例如"packages": ["packages/*"]
。这样lerna可以正确识别和管理各个子项目。
- 在根目录的
- yarn workspaces:
- 在根目录的
package.json
中,通过workspaces
字段配置子项目路径,例如"workspaces": ["packages/*"]
。这使得yarn能够对各个子项目进行统一管理。
- 在根目录的
3. tsconfig.json设置
- 根目录tsconfig.json:
- 配置
paths
选项,以便子项目能够通过相对路径引用共享类型。例如:
- 配置
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@shared/types": ["shared/types"]
}
}
}
- 还可以配置 `declaration` 为 `true`,`declarationDir` 指向共享类型目录,用于生成类型声明文件。
- 子项目tsconfig.json:
- 继承根目录的
tsconfig.json
,例如通过"extends": "../../tsconfig.json"
(假设子项目在packages
目录下)。 - 可以根据子项目需求,在继承基础上覆盖或添加其他
compilerOptions
,但要确保不影响共享类型的引用。例如,如果子项目需要特定的module
配置,可以在子项目tsconfig.json
中设置。
- 继承根目录的
4. 引用共享类型
- 在子项目中,通过配置的别名引用共享类型,例如:
import { SharedType } from '@shared/types';
这样就可以方便地在不同子项目中复用共享类型声明,同时保持项目结构清晰,便于维护和管理。