ES6-babel转码
关于BaBel转码
有人问我babel的功能以及执行的过程和配置,在网上查阅了大量的资料~收集到这些~有错请指出,及时修改。
--------------------------------------------------------------------------------------------------
众所周知,解决Nodejs异步问题的终极方案就是使用async/await
方案,但是每次在项目中配置都会或多或少有些问题,每次都会被几个组件
- babel-core
- babel-polyfill
- babel-preset-es2015
- babel-preset-stage-0
- babel-plugin-*
搞的有点混淆不清,甚至不知所措,我们的项目环境利用expressjs搭建,不同程度的使用了es6甚至es7的语法特性和新的API,所以babel转码
我们先看下具体的CASE
CASE
nodejs 4.4.7
Case 1
去掉 app.js
里边的 // import 'babel-polyfill'
和 // import 'babel-core/register'
, .babelrc
里边需要有plugins
{
"presets": [
"es2015",
"stage-0"
],
"plugins": [
["transform-runtime", { "regenerator": true }]
]
}
带有async的代码正常能run起来。
Case 2
去掉 app.js
里边加上 import 'babel-polyfill'
,babel里边正常
{
"presets": [
"es2015",
"stage-0"
],
"plugins": [
]
}
带有async的代码能正常run
import 'babel-polyfill
换成import "babel-core/register"
代码无法run起来,报错

nodejs v7.4.0
Case 1
app.js 中引入import 'babel-polyfill'
而 .babelrc 如下
{
"presets": [
"es2015",
"stage-0"
]
}
代码能正常run起来。
去掉
import 'babel-polyfill'
或者替换为import "babel-core/register"
代码均不能正常run
Case 2
app.js 中去掉 import 'babel-polyfill'
,而 .babelrc 代码加入
{
"presets": [
"es2015",
"stage-0"
],
"plugins": [
["transform-runtime", { "regenerator": true }]
]
}
代码可以正常run。
得到结论
如果需要使用async和await,有两种方式,
- 在程序的入口处第一行引入
import babel-polyfill
. - 或者使用babel转码的时候引入插件
["transform-runtime", { "regenerator": true }]
往下探索
首先我们要搞清楚async和await属于es2016(es6实际上是2015年发布的,es6常被称为es2015,而es2016其实就是es7)的特性,Nodejs在实现标准版本的进程上相对浏览器侧要快,截止到nodejs6.x的版本上,想要使用async和await还需要babel的转码才能实现。
还是看Case
例如如下代码
const fs = require('fs')
async function readFiles (fileName) {
return new Promise(function(resolve, reject) {
fs.readFile(fileName, function(error, data) {
if (error) reject(error)
resolve(data)
})
})
}
const start = async function() {
const result = await readFiles('/Users/liujb/Desktop/aa.txt')
console.log(result.toString())
}
start()
亲测在v7.4.0
下报语法错误,在v7.7.4
下能run。


关于babel

from
以上内容还是很清晰的,通过babel转码会默认读取babelrc设定的规则,同时会运用相应的插件。
关于插件
babel-register and babel-polyfill
仔细阅读阮老师的博客
babel-register是一个钩子,会对require的js、es、jsx、es6后缀的文件进行转码,且不会对当前文件进行转码,而且是实时转码所以只适合开发阶段。
babel-polyfill对es6的API进行转码,bable只会对syntax进行转码。
babel-plugin-*
babel-plugin-* 代表了一系列的转码插件,如babel-plugin-transform-es2015-arrow-functions 用于转码 es6 中的箭头函数,babel-plugin-transform-async-to-generator 用于将 es7 中的 async 转成 generator。
babel-preset-*
我们现在有了 babel-plugin 系列,可以按需配置自己想要的特性。但若是想搭个 es6 环境,一个个地配置各个插件,我猜你会疯掉。babel-preset 系列就可以满足我们的需求,babel-preset 系列打包了一组插件,类似于餐厅的套餐。如 babel-preset-es2015 打包了 es6 的特性,babel-preset-stage-0 打包处于 strawman 阶段的语法
babel-plugin-transform-runtime
以上内容来源于https://github.com/brunoyang/blog/issues/20
--------------------------------------------------------------------------------------------------
这一块的东西感觉还是不清晰,很神奇的就是目前接触到的项目里面,并没有在.babelrc.js文件的presets中配置es的版本,才疏学浅,目前还不清楚为什?之后会持续更新~
ES6-babel转码的更多相关文章
- es6 babel转码器安装配置及常见命令
示例:在d盘,新建文件夹es6,文件夹里新建一个文件es6.js. (1)先全局安装babel-cli,输入命令npm install babel-cli -g (2)输入d:( 进入d盘),再输入c ...
- Babel 转码器 § es6转换es5
Babel 转码器 § es6转换es5 实时转码 / Repl -babel-node / babel-register(自动转码引入babel-register模块) 配置文件.babelrc ...
- ES6标准简介之Babel转码器解说
ES6是ECMAScript 6的简称,是JavaScript语言的下一代标准,现在基于jquery库的前端开发js所使用的标准是ES5(ECMAScript 5).ES6已于2015年6月正式发布. ...
- ES6入门一:ES6简介及Babel转码器
ES6简介 Babel转码器 Nodejs中使用ES6 WebPack中使用ES6及Babel转码插件 一.ES6简介与转码 1.1一个常见的问题,ECMAScript和JavaScript到底是什 ...
- ES6转ES5(Babel转码器)
ES6转ES5(Babel转码器) 前提:必须在VScode中已经安装了Node.js 官网:https://nodejs.org/en/ 一.安装命令行转码工具 npm install --glob ...
- 在项目中ES6语法转ES5语法 babel转码器
es6 babel 安装以及使用 1,安装好node(需要使用npm包管理工具) 2,在本地项目路径下npm init,格式化成功后会在项目下生成一个配置文件package.json 3,本地安装 ...
- BABEL转码解惑
众所周知,解决Nodejs异步问题的终极方案就是使用async/await方案,但是每次在项目中配置都会或多或少有些问题,每次都会被几个组件 babel-core babel-polyfill bab ...
- 使用babel转码器,让浏览器支持es6语法
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,可是很多浏览器并不支持es6语法,所以我们需要一个转码工具, 把es6的语法转换成浏览器支持的javascr ...
- 在webstrorm中配置好es6 babel
第一步,新建一个项目,我这里建立了基于express 的node项目 第二步:将JavaScript语言版本切换为ECMAScript6 点击File —>settings,弹出设置框.把js的 ...
- VUE脚手架,babel转码 常用命令
vue-cli脚手架,单页面应用初始化时 npm -v 查看npm版本号 npm install vue-cli -g 全局安装vue-cli vue -V查看vue版本号,说明vue-cli已经安 ...
随机推荐
- Java代码规范_插件_阿里java开发手册
给大家分享一个阿里巴巴的java开发规范,在日常自动化工作中我们可以参考一下,特别是用java进行coding的同学. 而且还可以利用相应的插件进行代码扫描检测,感兴趣的们可以马上应用到自动化中来. ...
- 杂项-Java:JMX
ylbtech-杂项-Java:JMX 1.返回顶部 1. JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可 ...
- JSP-Runoob:JSP 链接数据库
ylbtech-JSP-Runoob:JSP 链接数据库 1.返回顶部 1. JSP 连接数据库 本教程假定您已经了解了 JDBC 应用程序的工作方式.在您开始学习 JSP 数据库访问之前,请访问 J ...
- 快速访问GitHub
Github网站可以访问,但是由于网络代理商的原因,造成访问速度很慢. 本文采取方法:手动更改hosts Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与 ...
- AcWing算法基础1.4
高精度 高精度加法,高精度减法,高精度乘低精度,高精度除以低精度,大概平时用的最多的就是这四个,模板有两种(因为我现在不太会用vector,就用数组也写了个,23333) 高精度运算和人工手算差不多, ...
- scrapy安装及基本使用
前端html, css, js 相关知识 数据库运用 http协议的了解 前后台联动 蜘蛛中间件.下载中间件 下载中间件的地方可以写各种反爬的策略 1.使用pip安装, pip3 install sc ...
- 题解报告:hihoCoder #1174:拓扑排序·一
题目链接:https://hihocoder.com/problemset/problem/1174 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲 ...
- “浪潮杯”第九届山东省ACM大学生程序设计竞赛重现赛 C-Cities
题目描述:There are n cities in Byteland, and the ith city has a value ai. The cost of building a bidirec ...
- Spark SQL入门案例之人力资源系统数据处理
通过该案例,给出一个比较完整的.复杂的数据处理案例,同时给出案例的详细解析. 人力资源系统的管理内容组织结构图 1) 人力资源系统的数据库与表的构建. 2) 人力资源系统的数据的加载. 3) 人力资源 ...
- Android基础TOP4:Tost的使用
Activity: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...