您好,登錄后才能下訂單哦!
本篇內容介紹了“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的報錯顯示是
在語法正確的情況下遇到語法錯誤/缺少標識符的報錯很大概率可能是es6+
語法沒有被編譯成es5
的語法,查看打包后的文件存在大量的const/let/解構等沒有被編譯。
SCRIPT1002: 語法錯誤
SCRIPT1010: 缺少標識符
安裝 @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/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());
按照提示安裝 @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 undefined,可以單獨引入Promise掛載到windeow上。
“ReactJS應用兼容ios9對標ie11問題怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。