@Dale-Lin
2022-09-15T17:23:32.000000Z
字数 1176
阅读 395
TypeScript
Project references 是 TS 3.0 新特性,可以将 ts 程序分成更小的部分,从而提升构建性能,加强组件间的逻辑分离。
tsc
命令的 --build
参数配合 project refernces 可以使构建更快。
tsconfig.json
顶层属性 references
是一个对象数组,指定了参考的项目:
{
"compilerOptions": {
// the usual
},
"references": [
{ "path": "../src" }
]
}
每个 path
属性都指向一个包含 tsconfig.json 或包含它的文件夹,结果是:
.d.ts
文件会替代导入.d.ts
--build
模式会自动在有需要的时候构建 referenced 项目(如果不开启则不会自动构建)可以避免多个项目开发时的多次编译和类型检查,减少内存使用。
referenced 的项目必须启用 compilerOptions.composite
,并遵守 composite 的三个约束(rootDir、include、declaration)
referenced 的项目可以启用 declarationMap
来支持编辑器的跳转到源码位置
tsc
的 --build
或 -b
参数可以增量构建,作用是:
找到所有 referenced 的项目
检测这些项目是否是最新的
自动按照依赖顺序构建过期的项目
tsc -b
tsc -b src
tsc -b foo/prd.tsconfig.json bar
传给 -b 的文件顺序 ts 会自动整理
--dry
:只打印结果而不执行
--clean
:删除指定项目的 outputs
--force
:强制构建所有项目(强行过期)
--watch
:watch 模式,通常结合 --verbose
--verbose
:打印logtsc
默认关闭 noEmitOnError
,即使有语法或者类型错误也会构建 .js 和 .d.ts 文件,但在增量构建模式下错误只会出现一次(因为后续构建可能会跳过这部分),所以 tsc -b
最好为所有项目开启 noEmitOnError
如果使用某些不保留源文件时间戳的修改工具,需要手动运行 --force
来构建
在指定项目的 reference 文件时建议使用一个单独的 solution 配置文件来管理当前项目的所有叶子节点项目,通过 extends 使用,并把 files 字段设置成空数组即可避免重复编译:
{
"references": [
{ "path": "pathToNode1" },
{ "path": "pathToNode2" },
// ...
],
"files": []
}