最近接手一个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 }