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

Aurelia TypeScript应用在Safari 7.1无法运行,8及以上版本正常

解决Aurelia+TypeScript应用在Safari 7.1中无法运行的问题

嘿,这个问题我之前帮团队处理过类似的——Safari 7.1对ES6+特性的支持非常有限,尤其是ES6装饰器语法,它完全没有实现这个特性,这就是你的应用在老版本Safari里跑不起来的核心原因。结合Aurelia和TypeScript的技术栈,给你几个可行的解决方向:

  • 用Babel转译装饰器及ES6+特性
    TypeScript本身对装饰器的编译只是做了基础语法转换,但Safari 7.1连转换后的代码都可能无法兼容。你需要引入Babel来进一步降级代码:

    1. 安装必要的Babel插件:npm install @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties --save-dev
    2. 在Babel配置文件(.babelrc或babel.config.json)中启用这些插件,注意Aurelia的装饰器基于旧提案,需要开启legacy模式:
      {
        "plugins": [
          ["@babel/plugin-proposal-decorators", { "legacy": true }],
          ["@babel/plugin-proposal-class-properties", { "loose": true }]
        ]
      }
      
    3. 调整TypeScript编译配置,把target设为ES5,让TypeScript先输出ES5代码,再交给Babel处理装饰器和剩余的ES6特性。
  • 优化TypeScript编译配置
    检查你的tsconfig.json,确保以下配置正确:

    {
      "compilerOptions": {
        "target": "ES5",
        "lib": ["ES2015", "DOM"], // 确保包含必要的标准库
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true, // Aurelia依赖这个元数据生成
        "module": "ESNext", // 配合打包工具使用
        "moduleResolution": "Node"
      }
    }
    

    把target设为ES5是关键,因为Safari 7.1对ES5的支持更完善。

  • 添加必要的Polyfill
    Safari 7.1缺少很多ES6内置API,比如Promise、Array.from、Object.assign等,这些都是Aurelia运行时依赖的。你可以用core-js来补充这些API:

    1. 安装依赖:npm install core-js regenerator-runtime --save
    2. 在应用的入口文件(比如main.ts)最顶部导入:
      import 'core-js/stable';
      import 'regenerator-runtime/runtime';
      

    这样能确保所有缺失的ES6+ API都被Polyfill,避免运行时报错。

  • 验证并排查具体错误
    打开Safari 7.1的开发者工具(偏好设置→高级→勾选“显示开发菜单”),查看控制台的具体错误信息。如果是Unexpected token '@',说明装饰器没被转译;如果是XXX is not defined,那就是对应的API需要Polyfill。根据错误信息针对性调整配置,能更快定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:08:44