背景:
使用rollup打包器,在入口文件中使用了es6 new Set(), 结果在ie11一下版本 报错
但是 rollup 中 我现在已经使用了 rollup-plugin-node插件,在ie中仍然报错。
后来查到Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。
需要使用babel -polyfill 解决这个问题,为当前环境提供一个垫片。
重点来了
我们首先 安装 babel/polyfill
- 在终端执行 npm install --save @babel/polyfill (注意不能是开发版本的依赖)
- 在项目入口文件 引入,require或者import都可以,我用的es6的模块,所以我用的后者 。
注意一定要在入口文件的最顶部使用
import '@babel/polyfill'
这个是安装完babel相关依赖包的位置
- 接下来是进行配置,在rollup中我们要在rollup.config.js中进行配置(webpack中是在.babelrl中配置)
babel({
exclude: 'node_modules/**',
presets: [
[
'@babel/env',
{
modules: 'false',
targets: {
browsers: '> 1%, IE 11, not op_mini all, not dead',
node: 8
},
useBuiltIns: 'usage'
}
]
]
})
接下来 再进行打包,ie预览,就没有报错了。