Babel对ES2015中 Generator 的支持

Babel对 Generator 的支持

最近新搭了一个react项目,用的ES2015,但是在运行生成器函数(Generator Function)的时候出现了报错,报错内容如下:

Uncaught TypeError: Cannot read property 'mark' of undefined

跟踪运行,查找报错位置:

var _marked = /*#__PURE__*/regeneratorRuntime.mark(generator);

默认babel是不支持generator函数的,官方提示是需要Babel polyfill 或者 regenerator runtime 的支持

我这里直接使用Babel polyfill

安装babel-polyfill

 npm install --save-dev babel-polyfill

使用

  1. 通过webpack
module.exports = {
    entry: {
        index: [
            'babel-polyfill' #增加
            ,'react-hot-loader/patch'
            , 'webpack-dev-server/client?http://localhost:8080'
            , 'webpack/hot/only-dev-server'
            , path.resolve(APP_PATH, 'index.js')]
    },
    ……
}
  1. 入口js文件

在代码头部加载babel-polyfill,注意一定要在代码开始前,第一个js文件的顶部。如果是vue在main.js头部,如果是其他的环境就在你入口js文件的顶部

import 'babel-polyfill';
// 或者
require('babel-polyfill');
关于babel-polyfill

它的初衷是模拟(emulate)一整套 ES2015+ 运行时环境,所以它的确会以全局变量的形式 polyfill Map、Set、Promise 之类的类型,也的确会以类似 Array.prototype.includes() 的方式去注入污染原型,这也是官网中提到最适合应用级开发的 polyfill。

如果在开发 library 的话,不推荐使用(或者说绝对不要使用)。

不同于插件,需要将 babel-polyfill 一次性的引入到工程中,通常是和其他的第三方类库(如 jQuery、React 等)一同打包在 vendor.js 中即可。在你写程序的时候,你完全不会感知 babel-polyfill 的存在,如果你的浏览器已经支持 Promise,它会优先使用 native 的 Promise,如果没有的话,则会采用 polyfill 的版本(这个行为与 babel-plugin-transform-runtime 一致)。

在使用 babel-polyfill 后,不需要引入 babel-plugin-transform-runtime 插件和其他依赖的类库。它的缺点也显而易见,那就是占文件空间并且无法按需定制。

更多内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值