1. ホーム
  2. typescript

[解決済み] spec/testフォルダを使用したtsconfigのセットアップ

2023-01-18 06:36:12

質問

私のコードを src の下に、テストは spec :

+ spec
+ --- classA.spec.ts
+ src
+ --- classA.ts
+ --- classB.ts
+ --- index.ts
+ tsconfig.json

トランスパイルしたいのは srcdist フォルダーにコピーします。このため index.ts は私のパッケージのエントリポイントなので、私の tsconfig.json はこのようになります。

{
  "compileOptions": {
    "module": "commonjs"
    "outDir": "dist"
  },
  "files": {
    "src/index.ts",
    "typings/main.d.ts"
  }
}

しかし、この tsconfig.json にはテストファイルが含まれていないので、その中の依存関係を解決することができませんでした。

一方、テストファイルを tsconfig.json に含めると、それらはまた dist フォルダに格納されます。

この問題を解決するにはどうすればよいですか?

どのように解決するのですか?

結局、複数の設定ファイルを定義して extends を使って簡略化しています。

2つのファイルがあるとします。 tsconfig.jsontsconfig.build.json

// tsconfig.json
{
  ...
  "exclude": [...]
}

// tsconfig.build.json
{
  ...
  "files": [ "typings/index.d.ts", "src/index.ts" ]
}

この方法では、何をビルドするかを細かく制御することができます ( tsc -p tsconfig.build.json を使って)、そして ts language service (IDE)が処理するものです。

UPDATE: 現在、私のプロジェクトが大きくなるにつれて、私はより多くの設定ファイルを持つことになりました。TypeScriptで利用できるようになった"extend"の機能を利用しています。

// tsconfig.base.json
{
  // your common settings. Mostly "compilerOptions".
  // Do not include "files" and "include" here,
  // let individual config handles that.
  // You can use "exclude" here, but with "include",
  // It's pretty much not necessary.
}

// tsconfig.json
{
  // This is used by `ts language service` and testing.
  // Includes source and test files.
  "extends": "./tsconfig.base.json",
  "atom": { ... },
  "compilerOptions": {
    // I set outDir to place all test build in one place,
    // and avoid accidentally running `tsc` littering test build to my `src` folder.
    "outDir": "out/spec"  
  }
  "include": [ ... ]
}

// tsconfig.commonjs.json or tsconfig.systemjs.json or tsconfig.global.json etc
{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    // for some build this does not apply
    "declaration": true/false,
    "outDir": "dist/<cjs, sys, global, etc>",
    "sourceRoot": "..."
  },
  // Only point to typings and the start of your source, e.g. `src/index.ts`
  "files": [ ... ],
  "include": [ ... ]
 }