babel里transform-runtime插件的作用

时间: 2019-08-09阅读: 31标签: 插件

首先看一个例子,源码:

function resolveAfter2Seconds() {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve('reggsolved');
        }, 2000);
    });
}

async function asyncCall() {
    console.log('calling');
    var result = await resolveAfter2Seconds();
    console.log(result);
    // expected output: 'resolved'
}

asyncCall();

通过bable转换,配置如下:

"presets": [
        [
            "env",
            {
                "exclude": [                         
                          "transform-async-to-generator",
                ]
            }
        ]
    ],
'use strict';

function resolveAfter2Seconds() {
    return new Promise(function(resolve) {
        setTimeout(function() {
            resolve('reggsolved');
        }, 2000);
    });
}

function asyncCall() {
    var result;
    return regeneratorRuntime.async(function asyncCall$(_context) {
        while (1) {
            switch (_context.prev = _context.next) {
                case 0:
                    console.log('calling');
                    _context.next = 3;
                    return regeneratorRuntime.awrap(resolveAfter2Seconds());

                case 3:
                    result = _context.sent;

                    console.log(result);
                    // expected output: 'resolved'

                case 5:
                case 'end':
                    return _context.stop();
            }
        }
    }, null, this);
}

asyncCall();

增加这个插件:'transform-runtime',配置如下:

{
    "presets": [
        [
            "env",
            {
                "exclude": [                         
                          "transform-async-to-generator",
                ]
            }
        ]
    ],

    "plugins" :['transform-runtime'] 
}

转换后的代码就变成这样了

'use strict';

var _regenerator = require('babel-runtime/regenerator');

var _regenerator2 = _interopRequireDefault(_regenerator);

var _promise = require('babel-runtime/core-js/promise');

var _promise2 = _interopRequireDefault(_promise);

function _interopRequireDefault(obj) {
    return obj && obj.__esModule ? obj : {
        default: obj
    };
}

function resolveAfter2Seconds() {
    return new _promise2.default(function(resolve) {
        setTimeout(function() {
            resolve('reggsolved');
        }, 2000);
    });
}

function asyncCall() {
    var result;
    return _regenerator2.default.async(function asyncCall$(_context) {
        while (1) {
            switch (_context.prev = _context.next) {
                case 0:
                    console.log('calling');
                    _context.next = 3;
                    return _regenerator2.default.awrap(resolveAfter2Seconds());

                case 3:
                    result = _context.sent;

                    console.log(result);
                    // expected output: 'resolved'

                case 5:
                case 'end':
                    return _context.stop();
            }
        }
    }, null, this);
}

asyncCall();

增加了这一段

var _regenerator = require('babel-runtime/regenerator');

var _regenerator2 = _interopRequireDefault(_regenerator);

var _promise = require('babel-runtime/core-js/promise');

var _promise2 = _interopRequireDefault(_promise);

function _interopRequireDefault(obj) {
    return obj && obj.__esModule ? obj : {
        default: obj
    };
}

此外替换的变量如下

Promise               =>     _promise2.default
regeneratorRuntime    =>    _regenerator2.default

至此,已经知道差别:一些全局变量直接require进来了

我们看看 transform-runtime的解释:

transform-runtime 是为了方便使用 babel-runtime 的,它会分析我们的 ast 中,是否有引用 babel-rumtime 中的垫片(通过映射关系),如果有,就会在当前模块顶部插入我们需要的垫片。

transform-runtime 是利用 plugin 自动识别并替换代码中的新特性,你不需要再引入,只需要装好 babel-runtime 和 配好 plugin 就可以了。好处是按需替换,检测到你需要哪个,就引入哪个 polyfill,如果只用了一部分,打包完的文件体积对比 babel-polyfill 会小很多。而且 transform-runtime 不会污染原生的对象,方法,也不会对其他 polyfill 产生影响。所以 transform-runtime 的方式更适合开发工具包,库,一方面是体积够小,另一方面是用户(开发者)不会因为引用了我们的工具,包而污染了全局的原生方法,产生副作用,还是应该留给用户自己去选择。缺点是随着应用的增大,相同的 polyfill 每个模块都要做重复的工作(检测,替换),虽然 polyfill 只是引用,编译效率不够高效。

链接: http://www.fly63.com/article/detial/5234

jquery.nicescroll滚动条美化插件

今天给大家介绍一个滚动条美化插件jquery.nicescroll,这个插件有以下一个主意事项:兼容所有最新的桌面浏览器和旧版:Chrome,Firefox,Edge,IE8 +,Safari(win / mac),Opera

AnySlider:适用于任何Html内容的jQuery Slider插件

任何Slider都是一个易于使用且支持触摸的jQuery插件,允许您为任何html内容创建可自定义的滑块,如图像,文本,视频等。在页面上包含jQuery库和jQuery AnySlider

用webpack发布一个vue插件包

先到npm官网上注册一通,然后npm login,顺利的登录了,再运行npm publish,然后报错:只有管理员可以发布此模块,上网查了之后说是npm镜像的问题,不能用淘宝镜像,于是就安装了nrm专门用于切换镜像

解决游览器安装Vue.js devtools插件无效的问题

打开自己写的一个vue.js网页,发现图标并没有亮起来,还是灰色;打开自己写的一个vue.js网页,游览器上图标有了 ,但是控制台不显示;解决方案:

基于Vue的验证码插件vue2-verify

在我们Web项目开发中,验证码是一种比较常见的区分用户是计算机还是人的手段。主要是为了保证项目的安全。现在Vue开发的项目很多,基本都是前后端分离的。给大家推荐一个基于Vue比较好用的验证码插件vue2-verify。但是大家要注意一点

video.js使用技巧

Video.js初始化有两种方式;一种是在<video>标签里面加上。注意,两者缺一不可。刚开始的时候我觉得后面的值为空对象{},不放也行,导致播放器加载不出来,后来加上来就可以了。

关于 tapable 你需要知道这些

在阅读 webpack 前如果不了解 tapable 的话,很有可能会看得云里雾里,那么 tapable 到底是什么,又有什么用呢?本文主要介绍 tapable 的使用以及相关实现,通过学习 tapable 能够进一步的了解 webpack 的插件机制

实现一个vue-router插件

要想自己实现一个vue-router插件,就必须先了解一下vue-router插件的基本使用,我们在使用vue-router的时候,通常会定义一个router.js文件,里面主要就是干了以下几件事:

Bootstrap Table插件自定义排序使用方法

Bootstrap Table 插件含有样式的数据如何排序,如下面的字段stargazers_count;第一种方式:增加加样式之前的额外字段,如增加stargazers_count1 字段,并设置data-sort-name=stargazers_count1

使用jquery-intro插件做页面引导

设置参数: 设置多个格式 json格式:key:value 可设置参数;下载jquery-intro;设置方法(多个参数设置);在页面中引用jquery-intro;定义引用的区块;配置jquery-intro的显示

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全