You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除CSP头unsafe-eval后JS代码报错,2.0.2版本兼容方案咨询

移除CSP unsafe-eval 后Angular 2.0.2代码无法运行的解决办法

核心方案:切换到AOT编译模式

从报错栈能看出,问题根源是Angular的JIT(即时编译)过程中,编译器调用了new Function()(属于CSP禁止的unsafe-eval范畴)。Angular 2.0.2支持AOT(提前编译),在构建阶段就把模板和组件编译成原生JS,运行时不需要动态编译,自然就不会触发unsafe-eval限制。

具体操作:

  • 安装对应版本的AOT工具:
    npm install @angular/compiler-cli@2.0.2 @angular/platform-server@2.0.2 --save-dev
    
  • 调整项目构建配置:
    1. 创建main-aot.ts作为AOT入口,直接导入编译好的模块(不再调用bootstrapModule):
      import { platformBrowser } from '@angular/platform-browser';
      import { AppModuleNgFactory } from './app/app.module.ngfactory';
      
      platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
      
    2. 使用ngc命令编译项目:
      ngc -p tsconfig-aot.json
      
      (需配置tsconfig-aot.json,指定angularCompilerOptions,比如"genDir": "aot", "skipMetadataEmit": true等)
    3. 部署编译后生成的AOT文件,替换原来的JIT构建产物

额外优化:Zone.js配置调整

报错里提到了zone.min.js,可以做以下配置避免不必要的eval调用:

  • 禁用Zone.js的长堆栈追踪功能,这个特性可能依赖eval,在导入Zone.js前添加:
    Zone.__disable_long_stack_trace = true;
    

其他排查方向

  • 检查依赖库是否有非eval版本:部分库会提供不含eval的构建包(比如带-no-eval后缀的版本),替换现有依赖试试
  • 排查自定义代码:虽然不修改库代码,但自己的代码里如果有直接用eval或new Function()的地方,优先移除

内容的提问来源于stack exchange,提问作者bateda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:52:09