在deploy.sh中使用tsc命令编译tsx文件出现编译错误如何解决
问题解决方案
1 修复TS6131编译错误与输出覆盖问题
你当前脚本存在两个核心错误:
- 多次调用
tsc指定同一个--outFile参数,每次执行都会覆盖前一次的编译结果,完全无法得到正确的合并文件 --outFile参数仅支持amd或system两种模块规范,你没有指定模块参数,默认模块规范不支持合并输出,因此触发TS6131报错
可选解决方案:
- 方案A(不需要合并单文件,推荐):放弃单文件输出,直接将所有tsx编译后输出到目标目录
替换原step4的所有tsc命令为一行:node_modules/typescript/bin/tsc src/*.tsx --jsx preserve --esModuleInterOp --strictNullChecks false --outDir $TARGETFOLDER/$WEBFOLDERNAME - 方案B(需要合并为单个app.jsx):增加模块参数指定为system
替换原step4的所有tsc命令为一行:node_modules/typescript/bin/tsc src/*.tsx --jsx preserve --esModuleInterOp --strictNullChecks false --module system --outFile $TARGETFOLDER/$WEBFOLDERNAME/app.jsx
2 修复严格模式类型报错
本地npm start不报错是因为你项目本地的tsconfig配置没有启用严格空值检查,而脚本中加了--strict参数强制启用了所有严格检查规则,因此触发了对象可能为null、never类型无对应属性的报错。
可选解决方案:
- 方案A(推荐长期方案):根据报错提示修复代码中的类型问题,补充空值判断、为never类型变量添加明确类型定义
- 方案B(临时规避方案):在tsc参数中添加
--strictNullChecks false关闭严格空值检查,或者直接去掉--strict参数,和本地开发配置保持一致
3 其他需要修正的细节
- 文件名大小写问题:你报错中出现的是
IdeaDetails.tsx、PostList.tsx,但脚本中写的是小写开头的ideaDetails.tsx、PostLists.tsx,Linux系统大小写敏感,会触发文件找不到的错误,需要修正文件名拼写和大小写 - 目录删除风险:原脚本
rm -rf $TARGETFOLDER会直接删除后端整个resources目录,可能误删其他后端配置文件,建议修改为只删除前端对应的目录:# 替换原step1的目录操作代码 rm -rf $TARGETFOLDER/$WEBFOLDERNAME mkdir -p $TARGETFOLDER/$WEBFOLDERNAME
内容的提问来源于stack exchange,提问作者Andrew Viera
相关产品推荐
相关产品推荐

