【问题标题】:TSC with allowJs compiles its own compiled JS outside rootDir带有allowJs的TSC在rootDir之外编译自己编译的JS
【发布时间】:2016-06-16 10:07:12
【问题描述】:

我有一个文件结构如下的项目:

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/ 目录。

我认为rootDir 会将要编译的文件限制到根目录。我可以将“已编译”添加到 exclude,但在 rootDir 之外还有很多其他文件夹包含 JS(其他构建工具等),所有这些都在启用 allowJs 的情况下被编译和输出。 . 我必须明确排除所有内容还是没有办法明确将编译器输入限制为src 路径?

【问题讨论】:

    标签: typescript typescript1.8


    【解决方案1】:

    我认为--rootDir 不会像您认为的那样做 - 它允许对输出目录结构进行更多控制(或多或少地强制它与输入目录结构匹配,而不是聪明地处理它)。

    关于参数的文档(来自tsconfig.json 架构):

    指定输入文件的根目录。用于控制输出 带有 --outDir 的目录结构。

    实现该选项的拉取请求描述: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 到文件夹A。

    还有一个很好的解释和例子:https://github.com/Microsoft/TypeScript/issues/287

    【讨论】:

    • 有道理,我绝对不明白rootDir的目的。那么有没有办法使用tsconfig.json来限制编译器输入到目录路径呢?
    • @Aaron 看来您只能使用exclude 目录或使用files 包含特定的单个文件。 tsconfig.json 文件也可以放在根目录以外的子文件夹中。
    • 知道了。感谢您的帮助!
    • 已经有一段时间了,所以我猜它当时不被支持,但是tsconfig.json now has a include configuration可以接受类似glob的模式,比如"include": [ "./src/**/*" ]
    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2010-09-16
    • 1970-01-01
    • 2016-03-14
    • 2016-11-05
    相关资源
    最近更新 更多