🧹

TypeScriptでビルドをするときにテストファイルを除く方法

2023/02/05に公開

TypeScriptでビルドをするときにテストファイルをビルド結果から取り除く方法です。

プロジェクトの構成

以下のような構成を参考にして説明します。
(testsフォルダはsrcの外側にありますが、srcの中にある場合も設定方法は同じです)

.
├── src
│   ├── index.ts
│   ├── lib
│   └── ()
├── tests
└── tsconfig.json

tsconfigの最初の設定内容と実行結果

tsconfigの設定は以下のようにしておりました。

tsconfig.json
{
  "compilerOptions": {
    ・・・
    "rootDir": "." ,
    "outDir": "./dist",
    ・・・
  }
}

package.jsonには以下のようなscriptsが設定してあります。

package.json
{
  "scripts": {
    "build": "tsc",
  }
}

これでビルドをすると

npm run build

このようにtestsフォルダも一緒にビルドされてしまいます。

.
├── dist
│   ├── src
│   │   ├── index.js
│   │   ├── lib
│   │   └── ()
│   └── tests # testsフォルダもビルド結果に含まれてしまう
├── src
│   ├── index.ts
│   ├── lib
│   └── ()
├── tests
└── tsconfig.json

解決方法(ボツ)

tsconfigを以下のように設定すれば、ビルド結果からtestsは取り除かれます。
ただ、testファイルを.tsで書いていた場合に今度はテストが実行されなくなってしまいますのでこの方法はだめでした。

tsconfig.json
{
  "compilerOptions": {
    ・・・
    "rootDir": "." ,
    "outDir": "./dist",
    ・・・
  },
  "include": ["./src/**/*.ts"]
}

解決方法(採用)

ビルド時と開発時でtsconfigの設定をわけることでこの問題を解決できます。
また、ビルド時と開発時で設定内容はほぼ同じになると思いますので、共通部分をtsconfig.jsonで定義しておきビルド時の差分のみを上書きするようにします。tsconfigではextendsを使って設定内容を上書きできます。

tsconfig.json

tsconfig.json
{
  "compilerOptions": {
    ・・・
    "rootDir": "." ,
    "outDir": "./dist",
    ・・・
  }
}

tsconfig.build.json

tsconfig.build.json
{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "rootDir": "./src" 
  },
  "include": ["./src/**/*.ts"]
}

また、ビルド時にはtsconfig.build.jsonを使用するように設定します。

package.json
{
  "scripts": {
    "build": "tsc --project tsconfig.build.json",
  }
}

これでビルドをすると

.
├── dist
│   └── src
│       ├── index.js
│       ├── lib
│       └── ()   
├── src
│   ├── index.ts
│   ├── lib
│   └── ()
├── tests
├── tsconfig.json
└── tsconfig.build.json

このような結果になり、ビルド結果からtestsが除かれるようになりました。

GitHubで編集を提案

Discussion