我正在使用create-react-app,并且我还有一些ts和tsx文件。在我的tsconfig文件中(见下文),我将noEmit设置为false,因为需要发出js文件。但是,每次启动服务器时,noEmit都会设置为false,并显示以下消息:
The following changes are being made to your tsconfig.json file:
- compilerOptions.noEmit must be true
将noEmit设置为false时,不会生成应从我的ts文件生成的js文件,这意味着该应用程序未更新。是什么导致这种行为?有什么办法可以避免呢?还是为包含ts文件的文件夹制作单独的tsconfig的唯一选择?
{
"compilerOptions": {
"target": "ES2017",
"module": "esnext",
"lib": [
"dom",
"dom.iterable",
"esnext",
"ES2017"
],
"allowJs": false,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"strictPropertyInitialization": false,
"strictNullChecks": false,
"strict": true,
"sourceMap": true,
"noEmit": true
},
"include": [
"src"
],
"exclude": [
"node_modules"
]
}
答案 0 :(得分:1)
您需要在 webpack.config 文件中覆盖此编译选项,如下所示:
rules: [
{
test: /\.tsx?$/,
loader: 'ts-loader',
options: {
compilerOptions: {
"noEmit": false
}
},
exclude: /node_modules/,
},
答案 1 :(得分:1)
您可以在命令执行后从 react-script 恢复文件更改。
就我而言,这是让我产生问题的测试脚本。所以我将此添加到我的 package.json 文件中:
[...]
"scripts": {
"pretest": "cp tsconfig.json tsconfig.json.save",
"posttest": "mv tsconfig.json.save tsconfig.json",
[...]
}
但是,如果您的测试失败,文件不会重命名为其原始文件名
答案 2 :(得分:0)
如果你使用 VS Code,必须创建一个名为 tsconfig-watch.json 的 tsconfig.json 文件的副本,并像下面的代码一样更改 .vscode 文件夹中的 task.json 文件。
<块引用>在 tsconfig-watch.json 文件中,你必须设置 "noEmit": false
{
"label": "tsc: watch",
"type": "typescript",
"tsconfig": "tsconfig-watch.json", //!important
"option": "watch",
"runOptions": {
"runOn": "folderOpen"
},
"problemMatcher": [
"$tsc-watch"
]
}