我的项目文件结构如下:
package.json
webpack.config.json
tsconfig.json
src/
assets/
node_modules/
compiled/
etc/
我的所有源代码(.js
和.ts
文件的混合)都在src
中,我编译的所有输出都应该放在compiled
中。我的tsconfig.json
看起来像这样:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"rootDir": "./src/",
"outDir": "./compiled/",
"allowJs": true
},
"exclude": ["node_modules"]
}
当我出乎意料地运行TSC时,它还会尝试在compiled
目录中编译自己的编译输出,即使它在rootDir
之外,并且因为allowJs
已启用它将无休止地重新编译自己发出的JS,创建compiled/compiled/compiled/compiled/
dirs。
我认为rootDir
会将要编译的文件限制为根目录。我可以添加"编译"到exclude
但是rootDir
之外还有很多其他文件夹包含JS(其他构建工具等),所有这些文件夹都被编译并输出{{1}我必须明确排除所有内容,或者无法明确限制编译器输入到allowJs
路径吗?
答案 0 :(得分:1)
我认为--rootDir
没有做你认为它做的事情 - 它允许更多地控制输出目录结构(或多或少地强制它来匹配输入目录结构而不是聪明一点)。
有关参数的文档(来自tsconfig.json
架构):
指定输入文件的根目录。用于控制输出 带有--outDir的目录结构。
实现该选项的Pull Request描述:https://github.com/Microsoft/TypeScript/pull/2772
使用--outDir时编译器的当前行为是 在输出下复制输入结构的值 --outDir。输入的根被计算为所有源(.ts而不是.d.ts)文件的最长公共路径。所以输入 将导致FolderA \ FolderB \ 1.ts和FolderA \ FolderB \ 2.ts 计算commonSourceRoot到FolderA \ FolderB。现在如果是新文件 FolderA \ 3.ts被添加到输入中,commonSourceRoot将弹出 到FolderA。
另一个很好的解释和示例:https://github.com/Microsoft/TypeScript/issues/287