Angular 14.2.0编译时持续出现Strict mode不允许with语句的语法错误,删除相关文件/代码及缓存后仍未解决
我太懂你这种摸不着头脑的崩溃了——明明已经移除了疑似问题的代码:
export { renderModule, renderModuleFactory } from '@angular/platform-server';
也按步骤操作了,结果编译时还是反复弹出Uncaught SyntaxError: Strict mode code may not include a with statement错误,而且问题还出现在.angular目录下的babel-webpack生成文件里,删了文件夹它还自动重建出带with (的代码,这确实离谱!
结合你遇到的编译阶段报错、缓存清理无效的情况,给你几个针对性的排查方向:
检查依赖版本冲突
Angular 14.2.0对babel、webpack这类编译工具有严格的版本匹配要求,很可能是项目里某些依赖(比如第三方库、自定义插件)偷偷引入了不兼容的babel版本,导致编译时生成了违规的with语句。可以运行下面的命令查看babel的版本树:npm ls @babel/core # 或者yarn项目用 yarn list @babel/core如果发现多个版本的babel,建议在
package.json里锁定Angular 14兼容的babel版本(大概是7.18.x系列),并清理冗余依赖。排查自定义webpack/babel配置
如果你用了@angular-builders/custom-webpack扩展了编译配置,或者自己写了webpack.config.js,一定要检查有没有启用某些老旧的babel插件——有些旧插件会用with来处理作用域,在严格模式下就会触发报错。把这些插件替换成Angular官方推荐的版本,或者直接移除不必要的自定义配置试试。彻底清理缓存与依赖
只删.angular目录可能不够彻底,试试这套完整的清理流程:- 删除项目根目录下的
node_modules文件夹 - 清理包管理器缓存:
npm cache clean --force # yarn用户用 yarn cache clean - 重新安装所有依赖:
npm install/yarn install - 再删除
.angular和dist目录,然后重新执行编译:ng build
- 删除项目根目录下的
检查第三方库的兼容性
有些老旧的第三方库本身的代码或编译产物里就包含with语句,在Angular的严格模式编译下就会触发错误。可以排查最近新增的依赖,或者逐个禁用可疑库来定位问题,找到后替换成更新的兼容版本。核对Angular编译配置
打开tsconfig.json,检查compilerOptions里的strict是否为true,有没有意外开启noImplicitUseStrict(这个配置会影响严格模式的处理逻辑)。另外也可以看看angular.json的build配置项,有没有额外添加的babel/webpack参数导致异常。
你提到错误出现在.angular下的babel-webpack生成文件,说明问题出在Angular编译过程中的babel转换环节,重点围绕babel相关的依赖和配置排查,应该能找到根源。如果还是不行,可以尝试创建一个全新的Angular 14.2.0项目,对比它的依赖版本和配置文件,看看你的项目哪里存在差异。
备注:内容来源于stack exchange,提问作者Peter The Angular Dude

