【问题标题】:TypeScript compiler: generated sources, root dirs, excludes and symlinksTypeScript 编译器:生成的源、根目录、排除和符号链接
【发布时间】:2016-10-18 23:48:54
【问题描述】:

我有一个 TypeScript 2.0.3 项目的设置:

src/main/webapp/tsconfig.json
src/main/webapp/app -- contains .ts files
src/main/webapp/app/tsModels -- a symlink to ../../../../target/tsModels
target/tsModels/   -- contains .ts files

目标是编译 target/tsModels 中的 .ts 文件。

首先,与"rootDir": "."tsc 投诉:

错误 TS6059:文件“[...]/target/tsModels/AboutWindupModel.ts”不在“rootDir”“[...]/src/main/webapp”下。 'rootDir' 应包含所有源文件。

所以我尝试了

{
  "compilerOptions": {  ...,
    //"rootDir": ".",
    "rootDirs": [".", "../../../target/tsModels"],
  },
} 

还是一样。试过了:

{
  "compilerOptions": {
    //"rootDir": ".",
    "rootDirs": [".", "../../../target/tsModels"],
  },
  "exclude": [
    "node_modules",
    "target/**",
    "../../../target/**", 
    "../../../target/**/*",
    "../../../target/tsModels/*", 
    "typings/main",
    "typings/main.d.ts"
  ]
}

但仍然出现该错误。

所以tsc 似乎无法正确处理符号链接,始终检查规范路径。

所以我想,好吧,让我们直接编译tsModels 文件。所以我删除了符号链接并尝试:

  "compilerOptions": {
    //"rootDir": ".",
    "rootDirs": [".", "../../../target/tsModels"],
  },

但这实际上并没有编译tsModels 目录中的文件。
我什至尝试过

    "rootDirs": "../../../target/tsModels",

但是tsc 没有编译它,而是编译了.。它完全服从吗?

我应该怎么做才能从两个目录编译文件?
有没有办法使用指向rootDir 之外的目录的符号链接?

包含我尝试的所有垃圾的完整配置:

{ "compilerOptions": { "target": "es5", "module": "system", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "removeComments": false, "noImplicitAny": false, //"rootDir": ".", //"rootDirs": [".", "../../../target/tsModels"], "rootDirs": ["../../../target/tsModels"], //"rootDir": "../../../target/tsModels", "outDir": "../../../target/windup-web", "sourceRoot": "/windup-web/" }, "exclude": [ "node_modules", //"target/**", //"../../../target/**", //"../../../target/**/*", //"../../../target/tsModels/*", //"target/tsModels/**", "typings/main", "typings/main.d.ts" ] }

【问题讨论】:

    标签: typescript compilation symlink tsc


    【解决方案1】:

    我认为preserveSymlinks 编译器选项可以帮助您:

    不要将符号链接解析到它们的真实路径;将符号链接文件视为真实文件。

    https://www.typescriptlang.org/docs/handbook/compiler-options.html

    例子:

    {
        "compilerOptions": {
            "preserveSymlinks": true
        }
    }
    

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 这不是仅链接的答案。重要信息 - “使用 preserveSymlinks 编译器选项” - 在答案文本中。该链接本身并不能回答问题,它是所有编译器选项的列表,我添加它仅供参考。
    • 如果您觉得信息不足,我添加了一个示例。
    • 实际上我的评论可能会失败,这是很自然的。在 SO 中,几个审阅者应该在做出决定之前达成一致。不合格的审稿人会受到处罚。只是在我看来,SO是创建内容的系统,其中“答案”是一个内容单元(而不是其他论坛上的线程)。 Asnwer 应该是一个有趣的“故事” :) 如果我失败了,请不要太担心 - 其他评论者/版主会评论我 :) 它是如何工作的。
    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 2012-09-22
    • 2010-09-17
    • 2014-04-10
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多