Next.jsアプリを開発しています。次のtsconfig.js
{
"compilerOptions": {
"target": "ES2018",
"module": "esnext",
"lib": [
"dom",
"es2018",
"es2019.array"
],
"jsx": "preserve",
"sourceMap": true,
"skipLibCheck": true,
"strict": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"allowJs": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"incremental": true
},
"exclude": [
"server",
"next.config.js"
],
"include": [
"lib/global.d.ts",
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
"**/*.js"
]
}
開発モードでは問題なく実行されていますが、ビルドの作成中に次のエラーが表示されます。
ERROR in tsconfig.json
22:5 Option 'noEmit' cannot be specified with option 'incremental'.
20 | "resolveJsonModule": true,
21 | "isolatedModules": true,
> 22 | "noEmit": true,
| ^
23 | "incremental": true
24 | },
25 | "exclude": [
Next.js自動的に挿入 'noEmit:true'in tsconfig.json
ファイル。ビルドを高速化するには、インクリメンタルモードが本当に必要です。これに対する解決策は何ですか?
From TypeScript issue#33809 :
incremental
は増分メタデータを書き込むことができないため、noEmit
とnoEmit
を一緒に使用しても意味がありません。 (したがって、実際には増分はありません)。実際にインクリメンタルチェックだけが必要な場合は、
emitDeclarationOnly
ではなくnoEmit
を検討する必要があります。
これによれば、incremental: true
が定義されている間、noEmit: true
フラグはビルドを高速化するために何もしていません。したがって、noEmit: true
を削除するか、emitDeclarationOnly: true
に変更する必要があります。
outDir
およびdeclarationDir
を使用して、出力フォルダーを制御できます。
--incremental
と--noEmit
可能です 今:
"compilerOptions": {
"noEmit": true,
"incremental": true,
// "tsBuildInfoFile": "/tmp/my-proj/tsbuildinfo" // custom build info file path
// ...
}
ビルド情報ファイル 出力されますnoEmit
を使用しても。 --tsBuildInfoFile
。それ以外の場合はoutDir
-まだ設定されている場合-またはtsconfig.json
プロジェクトルートは、emitディレクトリとして取得されます。
"compilerOptions": {
"incremental": true,
"declaration": true,
"emitDeclarationOnly": true, // to emit at least something
// "noEmit": true,
// ...
// Either set overall output directory
"outDir": "dist",
// or separate locations for build file and declarations
// "declarationDir": "dist"
// "tsBuildInfoFile": "/tmp/my-proj/tsbuildinfo"
}