最近接手一個React項目,在IE下碰到了倆問題git
IE11報錯以下:es6
跟蹤一下以後,發現是一些其餘的npm包裏面用到了startsWith這個方法,能夠本身polyfill一下:github
if (!String.prototype.startsWith) { String.prototype.startsWith = function (search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search } }
不過加prototype的方法畢竟很差,能夠經過引入@babel/polyfill
解決,在入口文件中引入import '@babel/polyfill'
;npm
IE11問題解決後,IE10又出問題了。。。babel
犯了stackoverflow和github的不少帖子以後,在這個帖子裏找到,發現是Object.setPrototypeOf
的問題,Object.setPrototypeOf說是支持了IE9-11, 實際在源碼裏只實現了11+(https://github.com/paulmillr/...ui
解決辦法能夠是在polyfill url後加上excludes=Object.setPrototypeOf
, 或者本身實現Object.setPrototypeOf
方法,我這裏引入了一個庫setprototypeof,而後在入口文件中加上Object.setPrototypeOf = require('setprototypeof');
this
其實這個庫裏的實現代碼很是少, 能夠簡單看下url
'use strict' /* eslint no-proto: 0 */ module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties) function setProtoOf (obj, proto) { obj.__proto__ = proto return obj } function mixinProperties (obj, proto) { for (var prop in proto) { if (!obj.hasOwnProperty(prop)) { obj[prop] = proto[prop] } } return obj }