Gulp/Webpack/Rollup を駆使! TypeScript ビルドで src フォルダ構成を dist へ

2024-05-26

以下は、TypeScript 3 で src フォルダ構造を維持して dist フォルダにビルドする方法です。

tsconfig.json ファイルを作成する

まず、プロジェクトのルートディレクトリに tsconfig.json ファイルを作成する必要があります。 このファイルには、コンパイル プロセスの設定を記述します。

{
  "compilerOptions": {
    "outDir": "dist",                   // コンパイルされた JavaScript ファイルの出力先ディレクトリ
    "rootDir": "src",                   // コンパイル対象の TypeScript ファイルのルートディレクトリ
    "preserveDirStructure": true        // ソース ディレクトリのディレクトリ構造を維持する
  }
}

上記の例では、outDir オプションでコンパイルされた JavaScript ファイルの出力先ディレクトリを dist に設定しています。 また、rootDir オプションでコンパイル対象の TypeScript ファイルのルートディレクトリを src に設定しています。 そして、preserveDirStructure オプションを true に設定することで、ソース ディレクトリのディレクトリ構造が維持されます。

tsc コマンドを実行する

tsconfig.json ファイルを作成したら、以下のコマンドを実行して TypeScript ファイルをコンパイルすることができます。

tsc

このコマンドを実行すると、src フォルダ内のすべての TypeScript ファイルが dist フォルダに JavaScript ファイルとしてコンパイルされます。




TypeScript 3 で src フォルダ構造を維持して dist フォルダにビルドするサンプルコード

src フォルダ構造

src
├── components
│   ├── button.ts
│   └── modal.ts
├── index.ts
└── utils
    └── math.ts

この例では、src フォルダ内に components フォルダと utils フォルダがあり、それぞれに TypeScript ファイルが格納されています。

{
  "compilerOptions": {
    "outDir": "dist",
    "rootDir": "src",
    "preserveDirStructure": true
  }
}

この tsconfig.json ファイルは、コンパイルされた JavaScript ファイルの出力先ディレクトリを dist に設定し、コンパイル対象の TypeScript ファイルのルートディレクトリを src に設定し、ソース ディレクトリのディレクトリ構造を維持するように設定しています。

index.ts ファイル

import { Button, Modal } from './components';
import { MathUtil } from './utils/math';

const button = new Button('Click me');
button.onClick(() => {
  const modal = new Modal('Hello, world!');
  modal.show();
});

console.log(MathUtil.add(1, 2)); // 3

この index.ts ファイルは、components フォルダと utils フォルダにあるモジュールをインポートして使用しています。

ビルド

tsc

このコマンドを実行すると、以下のようになります。

dist
├── components
│   ├── button.js
│   └── modal.js
├── index.js
└── utils
    └── math.js

dist フォルダには、src フォルダのディレクトリ構造が維持された状態で、JavaScript ファイルが生成されます。

説明

このサンプルコードでは、以下の点に注目してください。

  • tsconfig.json ファイルを使用して、コンパイル プロセスの設定を指定しています。
  • src フォルダ内のすべての TypeScript ファイルをコンパイルするように tsc コマンドを実行しています。
  • コンパイルされた JavaScript ファイルは、src フォルダのディレクトリ構造を維持して dist フォルダに生成されます。



TypeScript 3 で src フォルダ構造を維持して dist フォルダにビルドするその他の方法

Gulp を使用する

Gulp は、タスクランナーと呼ばれる JavaScript のライブラリです。 タスクランナーを使用すると、ファイルのコンパイル、テスト、配信などのタスクを自動化することができます。

const gulp = require('gulp');
const ts = require('gulp-typescript');
const tsConfig = require('./tsconfig.json');

gulp.task('build', () => {
  return gulp.src('src/**/*.ts')
    .pipe(ts(tsConfig))
    .pipe(gulp.dest('dist'));
});

このコードは、以下のことを行います。

  1. gulp-typescript プラグインを使用して、src フォルダ内のすべての TypeScript ファイルをコンパイルします。
  2. コンパイルされた JavaScript ファイルを dist フォルダに出力します。

この方法を使用するには、まず gulpgulp-typescript パッケージをインストールする必要があります。

npm install gulp gulp-typescript

次に、上記のコードを gulpfile.js というファイルに保存し、以下のコマンドを実行してビルドすることができます。

gulp build

Webpack は、モジュールバンドラーと呼ばれる JavaScript のライブラリです。 モジュールバンドラーを使用すると、複数のモジュールを 1 つのファイルにまとめることができます。

const webpack = require('webpack');
const path = require('path');

module.exports = {
  mode: 'production',
  entry: './src/index.ts',
  output: {
    filename: 'index.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: {
          loader: 'ts-loader',
          options: {
            transpileOnly: true,
          },
        },
      },
    ],
  },
  resolve: {
    extensions: ['.ts', '.js'],
  },
};
npm install webpack ts-loader
webpack
import rollup from 'rollup';
import ts from '@rollup/plugin-typescript';

const options = {
  input: 'src/index.ts',
  output: {
    file: 'dist/index.js',
    format: 'cjs',
  },
  plugins: [
    ts(),
  ],
};

rollup(options)
  .then((bundle) => {
    console.log('Build completed!');
  })
  .catch((error) => {
    console.error(error);
  });
npm install roll

typescript build tsc


型アサーションとas演算子の使い分け - TypeScriptにおける型変換のベストプラクティス

型アサーションには、2つの方法があります。型アサーション演算子 asアングルブラケット構文as 演算子は、TypeScript 2.0で導入された新しい構文です。従来のアングルブラケット構文よりも簡潔で読みやすいコードを書くことができます。...


npmを使ってTypeScriptを最新バージョンに更新する方法

npm を使って TypeScript を最新バージョンに更新するには、以下の手順に従います。手順現在の TypeScript バージョンを確認する出力例:最新バージョンの TypeScript を確認するhttps://github. com/microsoft/TypeScript/releases で最新バージョンを確認できます。...


TypeScript: 計算プロパティ名を使わずにコードをスマートに書く方法

TypeScriptでオブジェクトリテラルやインターフェースを定義する際、プロパティ名に式を使用できる機能があります。これは「計算プロパティ名」と呼ばれ、柔軟な型定義を可能にする便利な機能です。しかし、計算プロパティ名を使用する際には、いくつかの制約があります。その中でも、よくあるエラーメッセージが「TypeScript A computed property name in a type literal must directly refer to a built-in symbol」です。...


TypeScript コードの互換性を向上させる: downlevelIteration オプションの活用

ES6 以降で導入された新しいイテレータ構文は、古いブラウザではサポートされていません。downlevelIteration オプションを有効にすると、コンパイラはこれらの構文を古いブラウザでも動作するように書き換えます。downlevelIteration オプションを有効にすると、コンパイラはイテレータ構文をより効率的なコードに書き換えることができます。これは、特に古いブラウザでコードを実行する場合にパフォーマンスの向上につながる可能性があります。...


【知っておきたい】TypeScript ジェネリック型における等号演算子の落とし穴

この解説では、TypeScript のジェネリック型における等号演算子の意味を理解し、正しい使い方を学ぶために必要な知識を提供します。ジェネリック型は、型パラメータと呼ばれるプレースホルダを使用して定義されます。これらの型パラメータは、実際の型値で置き換えることができます。...