首先看一个例子,源码:
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 只是引用,编译效率不够高效。
向web前端开发者整理提供的chrome插件或应用:比如Postman、JSON Viewer、Page Ruler 、ChromeADB 等等
作为前端开发,我们都习惯使用一些开源的插件例如jquery工具库,那么如何使用原生js来开发封装一个自己的插件呢?接下来就看一下怎么去开发一个自己的js插件,先上代码
jquery.typeahead.js是一款高级的自动补全jQuery插件。该自动补全插件提供超过50个配置选项和回调方法,用于完成自动补全功能,能够完成绝大部分表单自动补全的需求。
这篇文章为大家分享图片轮播插件,最全最简单最通用的 幻灯片轮播插件,pc端和移动端都可完美使用,能满足绝大部分网站的轮播需求。js轮播插件包括Swiper、slick、owl carousel2、jssor/slider 、iSlider 等
在上个项目中,客户希望时间选择插件可以是ios风格的那种,但是找了很久,发现并没有用vue的ios风格时间插件,于是自己便自己造了一个轮子.插件依赖于better-scroll和vue
在前端开发中,使用Visual Studio Code有哪些你常用的插件?推荐几个自己喜欢的,不带链接,自己搜索安装吧。这些都是比较实用、前端必备的插件集
常用谷谷歌浏览器确实没有其它国产软件的内置功能丰富。但是 Google 浏览器的的优点恰恰就体现在拥有超简约的界面,以及支持众多强大好用的扩展程序,用户能够按照自己的喜好去个性化定制浏览器。今天我就给大家介绍几款自己常用的插件。
安装Sublime text 2插件很方便,可以直接下载安装包解压缩到Packages目录,也可以安装package control组件,然后直接在线安装
BlockUI 插件是用于进行AJAX操作时模拟同步传输时锁定浏览器操作。当它被激活时,它会阻止使用者与页面(或页面的一部分)进行交互,直至它被取消。BlockUI以在DOM中添加元素的方法来实现阻止用户与浏览器交互的外观和行为
使用vscode开发vue项目的时候,从远端拉下一个新的项目后,安装完依赖后跑起项目时,发现直接报了一堆语法错误:包括换行、空格、单双引号、分号等各种格式问题
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!