web-dev-qa-db-ja.com

オプション 'noEmit'はオプション 'incremental'と一緒に指定できません

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ファイル。ビルドを高速化するには、インクリメンタルモードが本当に必要です。これに対する解決策は何ですか?

9

From TypeScript issue#33809

incrementalは増分メタデータを書き込むことができないため、noEmitnoEmitを一緒に使用しても意味がありません。 (したがって、実際には増分はありません)。

実際にインクリメンタルチェックだけが必要な場合は、emitDeclarationOnlyではなくnoEmitを検討する必要があります。

これによれば、incremental: trueが定義されている間、noEmit: trueフラグはビルドを高速化するために何もしていません。したがって、noEmit: trueを削除するか、emitDeclarationOnly: trueに変更する必要があります。

outDirおよびdeclarationDirを使用して、出力フォルダーを制御できます。

2
Sampo

TS 4.0以降

--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"
  }

より詳しい情報

0
ford04