2つの異なる製品を作成する必要があるプロジェクトがあります。私が持っていると言います
./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"]
次に、私が持っているbasic
製品をビルドします
tsconfig-basic.json
{
"extends": "./tsconfig-base.json",
"compilerOptions": {
"noEmitHelpers": true
},
"files": [
"basic/main.ts"
]
}
そして、私は次のようにコンパイルします
$> tsc -p ./tsconfig-basic.json
今私には2つの問題があります
1)ファイルbasic/main.ts
が見つかりません。./basic/main.ts
であるはずのファイルが./src/basic/main.ts
で検索されています。 baseUrl
が付加されないのはなぜですか?
2)(1)が修正されている場合、コンパイルされたファイルは./dist
に書き込まれません。ここでベースファイルの"outDir": "./dist
が使用されないのはなぜですか? tsconfig-basic.jsonにoutDir
を追加すると、期待どおりに機能します
とにかく、ここでの拡張は機能しないか、期待とは異なる動作をするようです。セットアップを改善する方法はありますか?
1)baseUrl
は、webpackなどのバンドラーで使用することのみを目的としています。 TypeScript/10866 に関する議論を参照してください
2)これは残念ながら仕様によるものです。問題を参照 TypeScript/29172
ウェズリーウィガム(Microsoft従業員)の言葉:
パスベースのコンパイラオプション(outDir、outFile、rootDir、include、files)は、それらが存在する構成ファイルから解決されます)
tsconfig.json
ファイルごとにoutDir
を繰り返す必要があります。
しかし、トリックがあります。関連するディレクトリからベースTsconfigファイルへのシンボリックリンクを作成し、オリジナルではなくシンボリックリンクされたバージョンを拡張すると、すべてのパスが期待どおりに解決されます。