Je développe une application next.js. Il a les éléments suivants 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"
]
}
Il fonctionne bien en mode développement, mais lors de la création de la version, il affiche l'erreur suivante:
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 injecte automatiquement 'noEmit: true' dans tsconfig.json
fichier. Alors que j'ai vraiment besoin du mode incrémentiel pour des builds plus rapides. Quelle peut être la solution à cela?
De problème TypeScript # 33809 :
Cela n'a vraiment pas de sens d'avoir
incremental
etnoEmit
ensemble, puisquenoEmit
nous empêche d'écrire des métadonnées incrémentielles. (Donc rien n'est réellement incrémental).Vous devriez considérer
emitDeclarationOnly
au lieu denoEmit
, si vous voulez juste une vérification incrémentielle.
Selon cela, le incremental: true
flag n'a rien fait pour accélérer la construction pendant que noEmit: true
est défini. Vous devez donc soit supprimer noEmit: true
ou remplacez-le par emitDeclarationOnly: true
.
Vous pouvez contrôler les dossiers de sortie en utilisant outDir
et declarationDir
.
--incremental
avec --noEmit
est possible maintenant:
"compilerOptions": {
"noEmit": true,
"incremental": true,
// "tsBuildInfoFile": "/tmp/my-proj/tsbuildinfo" // custom build info file path
// ...
}
Le fichier d'informations de construction est émis même avec noEmit
. Vous pouvez définir son emplacement explicite via --tsBuildInfoFile
. Sinon outDir
- s'il est toujours défini - ou tsconfig.json
la racine du projet est prise comme répertoire d'émission.
"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"
}