阅读更多

0顶
0踩

编程语言

原创新闻 走进Babel 6.0 全新特性解析

2015-11-18 10:20 by 副主编 mengyidan1988 评论(0) 有4890人浏览
本文翻译自BABEL网站James Kyle撰写的《6.0.0 Released》一文,感谢景庄对该文章的翻译。

Babel 6刚发布不久,整个版本经历了彻底的重构和定位,目标是从一个单一的JavaScript转换器转向为一个JavaScript工具平台, 新的版本带来了很多全新的特性,并且在使用上也做出了很多重要的改变。本文翻译自Babel的官方博客,向你介绍Babel 6的定位、 特点、与使用方法。

Babel 6

过去的一年发生了很多的事。我们(Babel)团队在世界各地旅行并与当地的社区探讨Babel,通过这种方式, 我们也认识了很多非常廖记不起的开发者和合作伙伴。

在过去的一年,Babel一直在探索自己在JavaScript社区的定位。因此在二月份的时候,我们做出了一个决定, 认为Babel不应该仅仅只是个ES6语法转换器,取而代之的,它应该成为一个平台,它应该包括一组精心设计的工具用于创建下一代JavaScript工具集。

当我们发布Babel 5的时候,它开放了一组新的插件API,允许任何人依赖Babel的全部功力来创建能直接插入转换过程的工具。 仅仅几个月的时间,它就形成了一个完整的工具生态体系

从调试工具、框架优化和代码压缩到实验性的新语法和机制,开发者能够构建一切工具用于强化它们的代码库。 而这些扩展也已经被证明是非常有创造力并且极其有效的。

有的开发者也利用了Babel的内置组件(internals)来构建复杂的工具,例如documentationjs,它利用了Babel的Babylon解析器用于替代已有的工具,达到了一个更加智能的版本。

但是我们认为Babel可以走的更远。Babel有能力驱动代码压缩、代码规范(Linter)、代码格式化、语法高亮、代码完成工具、 类型检查、codemod工具等一系列功能,Babel能够让JavaScript社区朝着更好的方向发展。

因此,我们发布了Babel 6。

这应该有史以来Babel最重要的一次更新,因为它能让Babel更坚实的迈向平台化。

主要变化

模块化

模块化可能是Babel 6最大的一个变化,这个版本使用了尽可能模块化的方法进行了完整的重构, 通过设计统一的公共接口API,所有的转化器都进行了重构。

所有的内部组件都被抽取出来重构为单独的包,每个包都定义了一个轻量级的公共API,从而可以被其他组件所独立依赖。

如果你想使用某些Babel内部组件执行某种构建任务,现在,你只需要单独的去安装这个包,然后就能完成任务。 在包目录中你可以找到现存的所有的包和插件。

可选的插件

因为Babel现在的目标不仅仅是作为ES2015的转换器,而是作为一个JavaScript工具平台,因此我们决定让所有的插件都是可插拔的。 这就意味着,如果你现在直接安装  Babel的最新版本,那么默认情况下它并没有用来转换ES2015的代码的功能,你需要安装相应的转换器插件。

为了能够彻底的简化Babel的公共API,现在每个转换器(transformer)都是彻底独立的。 这就意味着“blacklist”、“whitelist”、“optional”、“nonStandard”和“modules”选项都被移除了, 但这并不意味你如果你要通过Babel来转换代码会带来更多的工作。

插件预设

因为在配置文件中指定和维护大量的转化器信息可能会导致大量的工作,因此Babel 6引入了插件预设值的概念, 可以用于组织相似的插件用于简单的消费。例如:
$ npm install --save-dev babel-preset-es2015

{
    "presets": ["es2015"]  
}

目前,官方的预设包括babel-preset-es2015和babel-preset-react,但是,我们希望未来能够有更多的预设插件。

我们也为不同的阶段提供了预设,例如babel-preset-stage-0(这和在Babel 5.x中在.babelrc中指定stage: 0的效果是一样的)。

性能改进

性能依然是Babel最为核心的指标之一。Babel 5彻底的革新了转换和遍历管道,用于提升和改进Babel的性能,这在Babel 6中依然被使用。

在Babel管道中,遍历过程是时间花费最主要的部分之一。使用任何的基于AST的工具你都希望能够尽可能快的完成对语法树的遍历。 Babel的插件也是按照这个方向进行设计的,因此它能够非常快的完成遍历工作。

Babel 6实现了一个新的优化方案,用于将所有的插件合并在一次遍历操作中。然后管理完整的遍历过程,因此插件无需再担忧这个过程。 作为一个开发者,你只需要关注业务逻辑,Babel会帮你处理其余的问题。

插件API

我们收到很多的反馈认为创建API让人迷惑,因此在Babel 6中,它变得更加简单了。注意这是个非常大的变化,但是它应该能够减少困惑。

*** Babel 5 ***
export default function ( {Plugin, types: t} ) {
    return new Plugin('ast-transform', {
        visitor: { ... }
    });
}

*** Babel 6 ***
export default function ( { types: t} ) {
    return {
        visitor: { ... }
    };
}

简单入门

安装 Babel

需要注意的是,已经不再有babel包了。在这之前,babel包囊括了整个编译器、所有的转换器以及一个CLI工具, 这么做的缺点就是它会导致很多不必要的下载,并且代码也令人困惑。因此,现在我们将它分为两个单独的包: babel-cli和babel-core。
$ npm install --global babel-cli
# or
$ npm install --save-dev babel-core

如果你想要在命令行使用Babel,你可以安装babel-cli,或者你需要在一个Node项目中使用Babel,你可以使用babel-core。

我们希望你尽快将你的代码升级到Babel 6,这将成为未来的主流。

增加插件和预设值

默认情况下,Babel 6并没有携带任何转换器,因此如果对你的代码使用Babel的话,它将会原文输出你的代码,不会有任何的改变。

因此你需要根据你需要完成的任务来单独安装相应的插件。例如,如果你想使用箭向函数的话:

首先安装箭向函数插件:
$ npm install --save-dev babel-plugin-transform-es2015-arrow-functions  

然后在你的.babelrc文件中加入下面的代码:
{
    "plugins": ["transform-es2015-arrow-functions"]
}

现在如果你对一个使用了箭向函数的源代码文件使用Babel的话它将会被成功的编译。非常简单吧。

Babel插件被设计用来渐增的编译代码。假设你想使用ES2019的特性的话,那么代码首先被编译为ES2018, 然后是ES2017,直到编译为浏览器支持的版本。这允许了用户能够使用它们想要使用的原生实现。

这也对单一的标准有效,例如ES2015常数将会被编译到ES2015的let变量。因此,如果你需要使用ES2015的其他特性的话, 你也可以按照类似的方法安装相应的插件:
$ npm install --save-dev babel-plugin-transform-es2015-constants
$ npm install --save-dev babel-plugin-transform-es2015-block-scoping

然后是配置文件
{
    "plugins": [
        "transform-es2015-constants",
        "transform-es2015-block-scoping"
    ]
}

当然手动配置这些单一特性非常的繁琐,这只适用于你仅仅使用了某几个ES2015的新特性,如果不是这种情况, 或者更一般的情况,你可以直接安装插件的预设,例如:
$ npm install --save-dev babel-preset-es2015

在.babelrc中配置:
{
    "presets": ["es2015"]
}

当然我们也为React准备了一个预设:
$ npm install --save-dev babel-preset-react

它的配置信息:
{
    "presets": ["react"]
}

最后

这对我们而言是个非常令人激动的发布。

任何参与过开源项目的人都会体会到,这是一个非常艰巨的任务,涉及到非常多的工作,但最终到发布的时候, 需要非常的感谢整个社区的力量。我们非常激动的发布Babel 6,我们希望Babel在未来能够成为最好用的JavaScript工具, 所以赶紧来尝试最新的版本吧。

原文链接:6.0.0 Released

译者简介:景庄,前端工程师,关注Node.js、前端工程化。个人博客:http://wwsun.github.com
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • egghead-flux-architecture:Flux,React,Webpack,Babel 6.0,ES6,react-router 1.0

    npm install babel webpack webpack-dev-server -g npm install npm start 打开浏览器到

  • Babel 6.0 全新特性解析

    本文翻译自BABEL网站James Kyle撰写的《6.0.0 Released...Babel 6刚发布不久,整个版本经历了彻底的重构和定位,目标是从一个单一的JavaScript转换器转向为一个JavaScript工具平台, 新的版本带来了很多全新的特性,

  • react-babel-6.0-error:如题

    react-babel-6.0-错误如题

  • Babel 基础配置和解析

    Babel是一个新语法转旧语法的平台,它只对synax进行转义,对于api需要使用其对应的插件进行转化。当前babel版本最优的使用方式应该是@babel/preset-env搭配@babel/plugin-transform-runtime,能够很好的处理高级语法的...

  • babel-eslint:用于ESLint的Babel解析器的包装器(重命名为@ babeleslint-parser)

    巴别·埃斯林特注意:babel-eslint现在为@babel/eslint-parser并且已移入 。... babel-eslint是允许ESLint在Babel转换后的源代码上运行的解析器。 注意:仅在使用Babel转换代码时才需要使用babel-eslint。

  • babel源码解析一

    AST(解析源码为ast) if (ast) { if (ast.type === "Program") { ast = t.file(ast, [], []); } else if (ast.type !== "File") { throw new Error("AST root must be a Program or File no...

  • FE - 走向Node与Webpack 之路 - ECMAScript 6.0 简单学习babel

    安装 babel-cli时自带 babel-node命令工具,Babel-node 在终端直接写代码(REPL); 基本命令: babel-node : 进入REPL环境 .exit :退出REPL环境 babel-node es6 .js : 直接运行es6脚本 Example : ...

  • babel-plugin-module-resolver 模块解析插件

    babel-plugin-module-resolver 是一个Babel模块解析插件, 在.babelrc中可以配置模块的导入搜索路径. 为模块添加一个新的解析器。这个插件允许你添加新的“根”目录,这些目录包含你的模块。它还允许您设置一个自定义...

  • vue babel-loader 解析 jsx报错

    http://www.imooc.com/qadetail/249591 https://blog.csdn.net/u013261261/article/details/77865840

  • babel对jsx的解析以及react虚拟dom树的加载转换

    一、babel是提供对react jsx语法的支持 我们可以像以前一样脚本中引入babel的js包,实现浏览器对这种jsx的支持,默认的babel碰到jsx这种语法时候,会调用React里的API进行处理,下边示例中,我们没有引入React,则...

  • Pluggable-Babel-Eslint:可插拔Babel-Eslint

    从Babel 7开始,Babel解析器可以通过启用Babel内部插件typescript来解析TypeScript代码。 但是,如上所述,在babel-eslint ,我们无法启用该插件。 使用此模块作为ESLint解析器,我们可以让我们的TypeScript代码在...

  • vue2 babel-core 6.x 升级到 7.x

    因为要使用新特性的时候发现 **?.**可选链操作符, **??**空值合并操作符, **??=**空值合并操作符等 二、如何升级 1、 package.json 中 babel 7 以下的全部删除 2、删除 package.json文件 3、删除node_modules...

  • babel源码解析之(@babel/preset-env)

    还记得之前写过一篇文章:babel源码解析一,里面把babel的整个流程跑了一遍,最后还自定义了一个插件用来转换“尖头函数”,通过前面的源码解析我们知道,preset其实就是一些插件的集合,这一节我们来介绍一个babel中...

  • [React][2020] webpack 4.x 项目中配置解析 jsx 语法的babel-loader全流程

    [React][2020] webpack 4.x 项目中配置解析 jsx 语法的babel-loader全流程 目录 安装babel插件 安装babel用于解析jsx语法的包 配置 webpack.config.js 配置 .babelrc 文件 正文 提示: 本文使用的babel及相关插件皆为...

  • babel源码解析之(@babel/plugin-transform-runtime)

    前面我们用了一篇很长的文章介绍了@babel/preset-env,感兴趣的可以去看我之前的一篇文章babel源码解析之(@babel/preset-env),今天我们要分析的是babel的一个插件,叫@babel/plugin-transform-runtime. 简介 我们看...

  • 关于babel转化后AST语法树的解析

    在这个阶段,Babel接受得到AST并通过babel-traverse对其进行深度优先遍历,在此过程中对节点进行添加、更新及移除操作。这部分也是Babel插件介入工作的部分。 关于生成: 将经过转换的AST通过babel-generator...

  • babel无法解析es5、jsx

    babel import babel-preset

  • Babel解析JS代码时SOURCETYPE_MODULE_REQUIRED错误解决方法

    在使用Babel解析JS代码时,如果代码中含有ES6(ECMAScript 6.0)风格的import或export语句,如下图的NodeJS代码: 这时可能会出现错误:'import' and 'export' may appear only with 'sourceType: "module"'。...

  • koa2项目快速配置babel7

    首先简述为什么用babel7,在做koa2项目中,使用了es6的一些新的特性,而koa2对es6,甚至es7的支持并不是做到了完全兼容,所以我们需要引入babel来帮助我们完成这些工作。 babel的版本最新版本到7了,原来很多的项目...

  • 前端AST详解,手写babel插件

    抽象语法树(Abstract Syntax Tree,AST),是源代码(不仅限于JavaScript,同时还应用于其他语言...对于前端来说很多⼯具,例如 elint 、 pretiier 对代码错误或⻛格的检查,babel、typescript对代码的编译处理等等。

Global site tag (gtag.js) - Google Analytics