我想将react scripts
更新到下一个版本(4.0.0
),以便在此处使用此指南的快速刷新功能。但在重新启动服务器时,由于以下错误,脚本无法工作:
$ yarn start
yarn run v1.22.4
$ react-scripts start
E:\Github\Web\so-rank\node_modules\react-scripts\scripts\utils\verifyTypeScriptSetup.js:210
appTsConfig.compilerOptions[option] = suggested;
^
TypeError: Cannot add property noFallthroughCasesInSwitch, object is not extensible
at verifyTypeScriptSetup (E:\Github\Web\so-rank\node_modules\react-scripts\scripts\utils\verifyTypeScriptSetup.js:210:45)
at Object.<anonymous> (E:\Github\Web\so-rank\node_modules\react-scripts\scripts\start.js:31:1)
at Module._compile (internal/modules/cjs/loader.js:1138:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
at Module.load (internal/modules/cjs/loader.js:986:32)
at Function.Module._load (internal/modules/cjs/loader.js:879:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
error Command failed with exit code 1.
这可以通过在t配置中启用
。有关更多信息,请参见此处的讨论。noFallthroughCasesInSwitch
选项来解决。json
{
"compilerOptions": {
"noFallthroughCasesInSwitch": true,
...
},
...
}
对于任何好奇的人来说,上述解决方案并不能修复这个bug。它只是跳过运行下面的错误代码,如果没有提供,它会将建议的值分配给typescript编译器选项。tsconfig。默认情况下,从
react脚本生成的json
没有noFallthroughCasesInSwitch
选项。添加该选项可以消除运行代码的需要。
// Some options when not present in the tsconfig.json will be assigned
// a suggested value which crashes the program
if (suggested != null) {
if (parsedCompilerOptions[option] === undefined) {
appTsConfig.compilerOptions[option] = suggested; // error here
...
}
}
编辑:
如果脚本与其他选项一起崩溃,并且您具有与我的问题中相同的stackTrack,您应该检查以下编译器选项是否在您的tsconfig.json
中丢失
当未在tsconfig中指定时,这些是Typescript编译器选项的建议值。json
const compilerOptions = {
// These are suggested values and will be set when not present in the
// tsconfig.json
target: {
parsedValue: ts.ScriptTarget.ES5,
suggested: 'es5',
},
lib: { suggested: ['dom', 'dom.iterable', 'esnext'] },
allowJs: { suggested: true },
skipLibCheck: { suggested: true },
esModuleInterop: { suggested: true },
allowSyntheticDefaultImports: { suggested: true },
strict: { suggested: true },
forceConsistentCasingInFileNames: { suggested: true },
noFallthroughCasesInSwitch: { suggested: true },
module: {
parsedValue: ts.ModuleKind.ESNext,
value: 'esnext',
reason: 'for import() and import/export',
},
moduleResolution: {
parsedValue: ts.ModuleResolutionKind.NodeJs,
value: 'node',
reason: 'to match webpack resolution',
},
resolveJsonModule: { value: true, reason: 'to match webpack loader' },
isolatedModules: { value: true, reason: 'implementation limitation' },
noEmit: { value: true },
jsx: {
parsedValue: ts.JsxEmit.React,
suggested: 'react',
},
paths: { value: undefined, reason: 'aliased imports are not supported' },
};
您需要将这些选项显式添加到tsconfig。json
,因此脚本可以跳过错误分支,避免崩溃。
我申请:
rm -rf yarn.lock
rm -rf tsconfig.json
然后,我使用命令warn
重新安装。
最后,纱线开始
。
这样,我创建了新的默认文件tsconfig。json
和文件。锁定
。
当我试图在react项目中开始使用typescript时,我遇到了完全相同的问题,是什么解决了这个问题?它正在使用下一个包以及我的包中的这些特定版本。json
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-scripts": "4.0.3",
"typescript": "^4.1.2",
而这个tsconfig.json
文件
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}