首先,建议大家装一下es-checker,看一下在当前node版本下,对es6支持的程度,下面是我本机node版本8.10.0对es6的支持:
其实8.10.0对es6已经达到90%的支持率了,但是如果想用import/export或者async/await是不支持的,这时候就用到了babel.下面就介绍一下如何在node使用babel.
node中的babel
npm包安装
- babel
- babel-core
- babel-plugin-transform-async-to-generator //为了支持async/await
- babel-plugin-transform-runtime //为了支持async/await,不安装就会报错 关于这个插件的详细教程
- babel-preset-es2015
配置.babelrc
{ |
node入口文件
入口文件需要加上一句话,并且需要加在最顶部。代表之后的文件都会自动通过babel编译,但是并babel不会编译当前的入口文件,所有当前文件不能用import/export等一些语法。require('babel-core/register');
做到上面这几点,其实就可以用es6的语法同时也可以用async/await了,下面看一个测试例子:
index.js node的入口文件// 顶部引入babel-core/register,下面引入的所有模块都自动通过babel编译,但当前文件不会编译
require('babel-core/register');
// require("babel-core").transform("code");
require('./es6js/await');
./es6js/await.js
import fs from 'fs'; |
运行 node index.js
输出:readme: I am a readme
log: I am a log!
关于babel
babel5 和 babel6 的区别
对于Babel来说,现在有了两个版本,一个是5,一个是6,那么两者有什么区别呢?
- 5对新手更加友好,因为只需要安装一个babel就可以了,而6需要安装比较多的东西和插件才可以。
- 相比5来说,6将命令行工具和API分开来了,最直观的感觉就是,当你想在代码中运行es6代码的话,需要安装babel-core,而如果你想在终端编译es6或者是运行es6版本的REPL的话,需要安装babel-cli
- 也许有人问,原先的babel去哪了?是这样的,这个babel的package到了6版本之后虽然还是能安装,但是已经不具有任何的有效的代码了。取而代之的是一段提示文字,提示你需要安装babel-core或者babel-cli。所以你在babel6的情况下,完全不需要安装babel
- 6将babel插件化,当你第一次安装babel-core并且按照以前的方式来加载require hook的话,你回发现代码无法运行:
require('babel-core/register');
就是因为babel6整体插件化了,如果你想使用es6语法,需要手动加载相关插件。
这里有一篇文章,建议看一下《The Six Things You Need To Know About Babel 6》
require hook
安装好之后,问题来了,如何使用呢?
相信使用过coffee的人一定知道register,那么在babel中同样不例外,也可以使用同样的方法。require('babel-core/register');
require('./app');
大家可能以为这样我就可以在app.js中优雅的使用es6了,在babel5中确实是这样的,但是在babel6中,缺不一样了。
如果你这样写完,并没有任何作用,因为你缺少一个插件。
安装插件
如果想使用es6语法,必须安装一个插件npm install babel-preset-es2015
然后在文件夹下面创建一个叫.babelrc的文件,并写入如下代码:{
"presets": ["es2015"]
}
==至此,babel就能把es6转成es5了==
参考文献: https://cnodejs.org/topic/56460e0d89b4b49902e7fbd3
https://segmentfault.com/a/1190000009065987