扩展 tsconfig.json 文件似乎没有扩展任何东西

Jea*_*eri 6 typescript tsconfig

我有一个项目,我需要从中构建两种不同的产品。说我有

./src/advanced
./src/basic
Run Code Online (Sandbox Code Playgroud)

所有代码都是用 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"]
Run Code Online (Sandbox Code Playgroud)

现在来构建basic我拥有的产品

tsconfig-basic.json

{
  "extends": "./tsconfig-base.json",
  "compilerOptions": {
    "noEmitHelpers": true
  },
  "files": [
     "basic/main.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我编译如下

$> tsc -p ./tsconfig-basic.json
Run Code Online (Sandbox Code Playgroud)

现在我有2个问题

1)basic/main.ts找不到该文件,./basic/main.ts它应该是./src/basic/main.ts. 为什么baseUrl没有前置?

2) 如果 (1) 是固定的,则编译后的文件不会写入./dist. 为什么"outDir": "./dist这里没有使用来自基本文件?当我将它添加outDirtsconfig-basic.json 时,它按预期工作

无论如何,看起来在这里扩展不起作用,或者与我预期的不同。任何建议如何改进我的设置?

a13*_*300 8

1)baseUrl仅适用于 webpack 等打包工具。请参阅有关TypeScript/10866 的讨论


2)不幸的是,这是设计使然。请参阅问题TypeScript/29172

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

您将需要为您拥有的outDir每个tsconfig.json文件重复。


Arc*_*ald 8

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