我有一个项目(on GitHub),它使用TypeScript编译器的Project References功能,因此它有名为子文件夹的tsconfig.json
根文件和tsconfig.json
文件shared
。
Shared
子文件夹包含2个文件:
User.ts
Point.ts
主index.ts
文件导入User
模块,例如
import User from './shared/User';
已编译的文件位于target
文件夹下。我遇到的问题是,由于tsc
,target
文件夹包含Point
.d.ts和.js文件(未导入,{{1} }),不包含index.ts
文件(由User
导入)。
index.ts
的输出:
tsc -b --listEmittedFiles
如果我从TSFILE: /home/user/Projects/test/target/index.js
TSFILE: /home/user/Projects/test/target/index.d.ts
TSFILE: /home/user/Projects/test/target/shared/Point.js
TSFILE: /home/user/Projects/test/target/shared/Point.d.ts
TSFILE: /home/user/Projects/test/target/shared/User.js
TSFILE: /home/user/Projects/test/target/shared/User.d.ts
中删除了import
表达式,则目标文件夹将同时具有index.ts
和User
脚本。
我的问题是:是Point
的bug还是我做错了?
在tsc
的{{1}}和3.3
版本上进行了测试,结果相同。
根3.4
:
tsc
tsconfig.json
文件夹中的{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"outDir": "./target",
"rootDir": "./source",
"strict": true,
"esModuleInterop": true
},
"references": [
{
"path": "./source/shared"
}
]
}
:
tsconfig.json
答案 0 :(得分:1)
最后,我自己找到了解决方案!
子项目的 tscconfig.json
文件应将输出指向主项目的target/
目录!
因此,假设您有一个常规项目,其中source/
目录定义为rootDir
,而target/
目录定义为outDir
。
在source
目录中,有两个子项目:core
和geometry
(如here所示)。
因此,他们两个都应将outDir
设置到主target/
目录中,例如:../../target/core
,../../target/geometry
。
或,使用configuration inheritance with "extends" property。在这种情况下,子项目的配置文件可以这样重写(example):
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"composite": true
}
}