溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ReactJS應(yīng)用兼容ios9對(duì)標(biāo)ie11問(wèn)題怎么解決

發(fā)布時(shí)間:2023-01-09 09:22:00 來(lái)源:億速云 閱讀:96 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“ReactJS應(yīng)用兼容ios9對(duì)標(biāo)ie11問(wèn)題怎么解決”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    遇到問(wèn)題

    遇到問(wèn)題之后有一個(gè)更大的問(wèn)題就是手上沒(méi)有ios9的機(jī)器,畢竟這個(gè)太他娘的古老了,我就去搜了一下ios9的出現(xiàn)時(shí)間,根據(jù)百度可知蘋果IOS9將于2015年9月16日正式向用戶推送,但是同時(shí)可以知道ie11于2013年10月17日隨Windows 8.1發(fā)行,所以(我猜的)只要能夠兼容ie11,那么兼容ios9應(yīng)該就問(wèn)題不大了,而且目前已知的解決兼容ie的方案比較多,沒(méi)找到啥兼容ios的方案,就先從ie入手。

    解決方案

    已知react兼容ie可以使用babel,實(shí)際上項(xiàng)目里面已經(jīng)用了babel,只不過(guò)沒(méi)有兼容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的報(bào)錯(cuò)顯示是

    ReactJS應(yīng)用兼容ios9對(duì)標(biāo)ie11問(wèn)題怎么解決

    安裝@babel/preset-env

    在語(yǔ)法正確的情況下遇到語(yǔ)法錯(cuò)誤/缺少標(biāo)識(shí)符的報(bào)錯(cuò)很大概率可能是es6+語(yǔ)法沒(méi)有被編譯成es5的語(yǔ)法,查看打包后的文件存在大量的const/let/解構(gòu)等沒(méi)有被編譯。

    SCRIPT1002: 語(yǔ)法錯(cuò)誤

    SCRIPT1010: 缺少標(biāo)識(shí)符

    ReactJS應(yīng)用兼容ios9對(duì)標(biāo)ie11問(wèn)題怎么解決

    • 安裝 @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

    其實(shí)配置完@babel/preset-env應(yīng)該就可以了,但是項(xiàng)目里面使用了裝飾器和類,所以還是報(bào)錯(cuò):

    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應(yīng)用兼容ios9對(duì)標(biāo)ie11問(wèn)題怎么解決

    按照提示安裝 @babel/plugin-proposal-decorators@babel/plugin-proposal-class-properties。(ps:使用yarn安裝,因?yàn)轫?xiàng)目使用的是node sass,所以node版本是14.16,對(duì)應(yīng)的npm是6,安不上這兩個(gè)插件。)

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

    yarn add @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties --save-dev
    • 按照?qǐng)?bào)錯(cuò)提示新增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

    其實(shí)到上面一步已經(jīng)差不多了,如果還報(bào)Promise undefined,可以單獨(dú)引入Promise掛載到windeow上。

    “ReactJS應(yīng)用兼容ios9對(duì)標(biāo)ie11問(wèn)題怎么解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI