モノレポにおけるTypeScript
モノレポでTypeScriptを使用するには、リンターとして、またはビルドツールとして、2つの方法があります。
このセクションでは、TypeScriptのリンターとしての役割について説明します。これは、TypeScriptがファイルの出力を行わないようにする(noEmit
(新しいタブで開きます))場合であり、ソースコードの型チェックにのみ使用する場合です。
tsconfig.json
の共有
巧妙なソリューションを使って、リポジトリ全体でTypeScriptの設定ファイルを共有できます。基本的なtsconfig.json
ファイルを単一のワークスペースに配置し、アプリのtsconfig.json
ファイルからそれらをextend
することができます。
このようなワークスペースを想像してみましょう。
apps
├─ docs
│ ├─ package.json
│ ├─ tsconfig.json
├─ web
│ ├─ package.json
│ ├─ tsconfig.json
packages
├─ tsconfig
│ ├─ base.json
│ ├─ nextjs.json
│ ├─ package.json
│ ├─ react-library.json
私たちのtsconfig
パッケージ
packages/tsconfig
内には、TypeScriptを構成するさまざまな方法を表すいくつかのjson
ファイルがあります。それぞれが次のようになります。
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Default",
"compilerOptions": {
"esModuleInterop": true,
"skipLibCheck": true,
"target": "es2022",
"resolveJsonModule": true,
"isolatedModules": true,
"moduleDetection": "force",
"strict": true,
"noUncheckedIndexedAccess": true,
"moduleResolution": "Bundler",
"module": "ESNext",
"noEmit": true,
"lib": ["es2022", "dom", "dom.iterable"],
},
"exclude": ["node_modules"]
}
package.json
内では、単にパッケージの名前を指定します。
{
"name": "tsconfig"
}
リポジトリ内の他のjson
ファイルは、単純なインポートでアクセスできます。
import baseJson from "tsconfig/base.json";
import nextjsJson from "tsconfig/nextjs.json";
import reactLibraryJson from "tsconfig/react-library.json";
これにより、さまざまな種類のプロジェクトに対して異なる設定をエクスポートできます。
tsconfig
パッケージの使い方
共有tsconfig
を使用する各アプリ/パッケージは、最初にそれを依存関係として指定する必要があります。
{
"dependencies": {
"tsconfig": "*"
}
}
次に、それらは**独自のtsconfig.json
内でそれを拡張**できます。
{
// We extend it from here!
"extends": "tsconfig/nextjs.json",
// You can specify your own include/exclude
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
概要
この設定は、新しいモノレポを作成する際にnpx create-turbo@latest
を使用すると、デフォルトで提供されます。基本的な例 (新しいタブで開きます)を見て、動作中のバージョンを確認することもできます。