扩展tsconfig.json文件似乎没有扩展任何内容

19

我有一个项目,需要构建两个不同的产品。假设我有:

./src/advanced
./src/basic

所有的代码都是用Typescript编写的,因此我需要使用tsc进行编译。

因此,我创建了3个tsconfig文件。

tsconfig-base.json

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "noImplicitAny": false,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es6",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./src",
    "lib": ["es2018", "dom", "dom", "dom.iterable", "es6"],
    "importHelpers": true,
  },
  "exclude": ["node_modules", "**/*.spec.ts","dist"]

现在要构建我拥有的基础产品

tsconfig-basic.json

{
  "extends": "./tsconfig-base.json",
  "compilerOptions": {
    "noEmitHelpers": true
  },
  "files": [
     "basic/main.ts"
  ]
}

我按照以下方式编译

$> tsc -p ./tsconfig-basic.json
现在我有两个问题:
1) 文件basic/main.ts找不到,它正在寻找./basic/main.ts,但应该是./src/basic/main.ts。为什么没有加前缀的baseUrl呢?
2) 如果(1)被修复了,则编译文件不会被写入./dist。为什么不使用基本文件中的"outDir": "./dist"?当我将outDir添加到tsconfig-basic.json中时,它按预期工作。
无论如何,看起来扩展在这里不起作用,或者与我期望的不同。有什么建议可以改善我的设置吗?
2个回答

17

1) baseUrl只适用于像webpack这样的打包工具。请参阅有关TypeScript/10866的讨论。


2) 不幸的是,这是按设计进行的。请查看问题TypeScript/29172

引用 Wesley Wigham (Microsoft 员工):
基于路径的编译器选项(outDir、outFile、rootDir、include、files)是从它们所在的配置文件解析的)

你需要为每个 tsconfig.json 文件都重复指定 outDir


9

不过有一个技巧。如果你在相关目录下创建一个符号链接到基本的 Tsconfig 文件,并且扩展该符号链接版本而不是原始版本,则所有路径都将根据您的期望解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接