带有allowJs的TSC在rootDir

时间:2016-06-15 20:41:51

标签: typescript typescript1.8

我的项目文件结构如下:

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路径吗?

1 个答案:

答案 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