温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ReactJS应用兼容ios9对标ie11问题怎么解决

发布时间:2023-01-09 09:22:00 来源:亿速云 阅读:116 作者:iii 栏目:开发技术

本篇内容介绍了“ReactJS应用兼容ios9对标ie11问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    遇到问题

    遇到问题之后有一个更大的问题就是手上没有ios9的机器,毕竟这个太他娘的古老了,我就去搜了一下ios9的出现时间,根据百度可知苹果IOS9将于2015年9月16日正式向用户推送,但是同时可以知道ie11于2013年10月17日随Windows 8.1发行,所以(我猜的)只要能够兼容ie11,那么兼容ios9应该就问题不大了,而且目前已知的解决兼容ie的方案比较多,没找到啥兼容ios的方案,就先从ie入手。

    解决方案

    已知react兼容ie可以使用babel,实际上项目里面已经用了babel,只不过没有兼容ie11

    初始配置

    {
        // react 版本
        "react": "^16.13.1",
        "react-dev-utils": "^10.2.1",
        "react-dom": "^16.13.1",
        "react-redux": "^7.2.0",
        "react-rnd": "^10.2.2",
        "react-router-dom": "^5.2.0",
        "redux": "^4.0.5",
        // babel 版本
        "@babel/core": "7.9.0",
        "babel-eslint": "10.1.0",
        "babel-jest": "^24.9.0",
        "babel-loader": "8.1.0",
        "babel-plugin-import": "^1.13.5",
        "babel-plugin-named-asset-import": "^0.3.6",
        "babel-preset-react-app": "^9.1.2",
        // browserslist
        "browserslist": {
        "production": [
          ">0.2%",
          "not dead",
          "not op_mini all"
        ],
        "development": [
          "last 1 chrome version",
          "last 1 firefox version",
          "last 1 safari version"
        ]
      },
      // babel config
      "babel": {
      "presets": [
          "react-app"
        ],
        "plugins": [
          [
            "import",
            {
              "libraryName": "antd-mobile",
              "style": "css"
            }
          ]
        ]
      }
    }

    ie的报错显示是

    ReactJS应用兼容ios9对标ie11问题怎么解决

    安装@babel/preset-env

    在语法正确的情况下遇到语法错误/缺少标识符的报错很大概率可能是es6+语法没有被编译成es5的语法,查看打包后的文件存在大量的const/let/解构等没有被编译。

    SCRIPT1002: 语法错误

    SCRIPT1010: 缺少标识符

    ReactJS应用兼容ios9对标ie11问题怎么解决

    • 安装 @babel/preset-env 和 babel-polyfill

    yarn add @babel/preset-env babel-polyfill --save-dev
    • 配置babel(我的babel是写在packjson里面的)

    // index.tsx 顶部引入
    import 'babel-polyfill';
    // presets 添加 @babel/preset-env ,target 配置 "ie > 9"
    "babel": {
      "presets": [
        "react-app",
        [
          "@babel/preset-env",
          {
            "targets": {
              "ie": 9
            }
          }
        ]
      ],
      "plugins": [
        [
          "import",
          {
            "libraryName": "antd-mobile",
            "style": "css"
          }
        ]
      ]
    }
    • 配置 browserslist,修改到ie>=9

      "browserslist": {
        "production": [
          ">0.2%",
          "not dead",
          "not op_mini all",
          "ie >= 9"
        ],
        "development": [
          "last 1 chrome version",
          "last 1 firefox version",
          "last 1 safari version",
          "ie >= 9"
        ]
      },

    安装 @babel/plugin-proposal-decorators 和 @babel/plugin-proposal-class-properties

    其实配置完@babel/preset-env应该就可以了,但是项目里面使用了装饰器和类,所以还是报错:

    SyntaxError: xxx.ts: Decorators are not enabled.
    If you are using ["@babel/plugin-proposal-decorators", { "version": "legacy" }], make sure it comes *before* "@babel/plugin-proposal-class-properties" and enable loose mode, like so:
            ["@babel/plugin-proposal-decorators", { "version": "legacy" }]
            ["@babel/plugin-proposal-class-properties", { "loose": true }]
      27 | }
      28 | 
    > 29 | @StoreConfig({ name: "auth", resettable: true })
         | ^
      30 | export class AuthStore extends Store<Auth> {
      31 |   constructor() {
      32 |     super(createInitialState());

    ReactJS应用兼容ios9对标ie11问题怎么解决

    按照提示安装 @babel/plugin-proposal-decorators@babel/plugin-proposal-class-properties。(ps:使用yarn安装,因为项目使用的是node sass,所以node版本是14.16,对应的npm是6,安不上这两个插件。)

    • 安装 @babel/plugin-proposal-decorators@babel/plugin-proposal-class-properties

    yarn add @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties --save-dev
    • 按照报错提示新增babel配置

    "babel": {
      "presets": [
        "react-app",
        [
          "@babel/preset-env",
          {
            "targets": {
              "ie": 9
            }
          }
        ]
      ],
      "plugins": [
        [
          "@babel/plugin-proposal-decorators",
          {
            "legacy": true
          }
        ],
        [
          "@babel/plugin-proposal-class-properties",
          {
            "loose": true
          }
        ],
        [
          "import",
          {
            "libraryName": "antd-mobile",
            "style": "css"
          }
        ]
      ]
    }

    安装promise

    其实到上面一步已经差不多了,如果还报Promise undefined,可以单独引入Promise挂载到windeow上。

    “ReactJS应用兼容ios9对标ie11问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI