src/
A/a.ts
B/b.ts
build/
tsconfig.ts
i将编译到构建文件夹中,我得到:
build/
A/a.js
B/b.js
但我真正想要的是:
build/
A/
a.js
b.js
I尝试使用
typescript引用,但是在我的情况下,这不起作用,因为B和反之亦然的参考文件中的文件。由于
tsconfig.ts
要求rootDir
以某种方式包含所有导入文件,因此需要将其设置为
src/
,并且由于发射文件的文件夹结构是基于此的,因此我找不到一种方法 - 以它的结果来获得我想要的结果(无论我做什么,总会有一个
B/b.js
和
A/a.js
)
目前,我唯一的解决方案是使用后处理脚本在
build/
中移动文件夹,所以我的问题是,我有什么办法可以在不进行后处理的情况下获得所需的结构?也许我不知道某些配置,或某种插件。
[编辑]:如果我使用后处理,则观看文件会受到划伤,因此这是避免它的原因之一。
我只是假设您的实际用例很有意义,而您的示例听起来像是胡说八道,因为它被简化为基础知识,足够公平。
typecript没有特征可以将源结构转换为不同的目标结构。但是,您可以使用用于monorepos的
组合项目配置src/A
文件夹编写一个TSCONFIG,一个为您的
src/B
文件夹编写一个,都使用build/A
作为输出文件夹。对于您的简单问题来说,这可能看起来像是很多开销,但我敢肯定没有其他仅使用打字稿的解决方案。
首先,您应该创建一个与所有其他TSCONFIG文件共享的设置。您至少需要其中的
tsconfig.base.json
设置:Tsconfig.base.json
composite
{
"compilerOptions": {
"composite": true
}
}
tsconfig.json
::
Tsconfig.json
tsc
然后您需要每个源文件夹中的两个文件:src/a/tsconfig.json
{
"extends": "./tsconfig.base.json",
"references": [
{ "path": "./src/A" },
{ "path": "./src/B" }
]
}
Src/b/tsconfig.json
tsconfig.json
由于您使用共享的输出目录,因此将设置设置为不同的文件名很重要,因为否则{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"outDir": "../../build/A",
"rootDir": ".",
"tsBuildInfoFile": "../../build/A/a.tsbuildinfo"
}
}
构建信息{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"outDir": "../../build/A",
"rootDir": ".",
"tsBuildInfoFile": "../../build/A/b.tsbuildinfo"
}
}
tsBuildInfoFile
,杀死Typescript的增量构建功能。
现在您可以使用此命令来构建项目:
src/B
并用此命令观看它:
src/A
tsc --build
选项,因为此设置是一个复合项目。