首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Babel 入门教程(五):babel-register与babel-core

前情提要

最近发生了种种小事,但是无论怎样,我总是信奉着一句话:“别人看到的永远是表面”。然后我在长期健身中悟道的一句话也送给大家共勉。

The fucking harder you tried, the fucking stronger you will be.

好,言归正传。上一节《Babel 入门教程(四):babel-cli 与 babel-node 及工程实践》中我们讲到了 与 如何辅助我们转译 ES6 文件或者支持我们在终端的 REPL 上进行 ES6 的代码运行,比较轻松和简单。

那么有没有办法让我们在文件中直接写 ES6 代码,而且写完之后不用通过 来进行转译文件呢?有!就是今天所要讲的 与 。

Babel 5.x 与 Babel 6.x

讲 和 之前一定要重新提及一下 babel 的版本。很多教程和很多同学在这里并没有一个很清晰的概念,导致会安装使用就行了,也不问为什么。

近几年 babel 有版本 5.x 和 6.x,那么两者有什么区别呢?

5.x 对新手更加友好,因为只需要安装一个babel就可以了,而6需要安装比较多的东西和插件才可以;

相比 5.x 来说,6.x 将命令行工具和 API 分开来了,最直观的感觉就是,当你想在代码中运行 ES6 代码的话,需要安装 ,而如果你想在终端编译 ES6 或者是运行 ES6 版本的 REPL 的话,需要安装 ;

原先的 babel 的 package 到了 6.x 版本之后虽然还是能安装,但是已经不具有任何的有效的代码了。取而代之的是一段提示文字,提示你需要安装 ,所以你在 babel6 的情况下,完全不需要安装 这个 npm 包;

6.x 将 babel 插件化,当你第一次安装 并且按照以前的方式来加载 的话,你会发现代码无法运行,因为要求需要 配置文件或者在 中添加相关的 babebl 的插件配置

babel-register

github 上官方对其的描述:

The require hook will bind itself to node's require and automatically compile files on the fly.

该 npm 包用于实时加载ES6 语法写的脚本文件,但是由于实时加载解析为 ES5 语法代码有时间上的延迟,所以仅适用于开发环境。

babel-register 包改写 命令,为它加上一个钩子,就是在上面提到的 。此后,每当使用 加载 、 、 和 后缀名的文件,就会先用 Babel 进行转码。

安装 babel-register:

使用:

注意:可以在加载该钩子的时候传入默认配置,也可以在加载实例文件的时候传入特例配置;另外, 还是对每一个文件的实时转译都起作用的。

详细的配置参数可以上 github 上查看。

https://github.com/babel/babel/packages/babel-register

babel-core

github 上官方对其的描述:

Babel compiler core.

这描述真的可以再短一点呢。

如果某些代码需要调用 Babel 的 API 进行转码,就要使用 babel-core 包。它是 Babel 的核心依赖包。

安装 babel-core:

注意:所有以下涉及到的 字段请查阅中文官网文档,链接如下。

https://babeljs.cn/docs/core-packages/

或者 github 上的官方仓库

https://github.com/babel/babel/packages/babel-core

使用 babel-core 之 babel-transform

该 API 语法:

该 API 作用: 将传入的 code 进行转换。返回值为一个对象,参数分别为生成的代码,source map 以及 AST 。

示例:

使用 babel-core 之 babel-transformFile

该 API 语法:

该 API 作用: 异步转译文件中的全部内容。

使用 babel-core 之 babel-transformFileSync

该 API 语法:

该 API 作用: 的同步版本。返回值为 文件中转译后的代码。

示例:

使用 babel-core 之 babel.transformFromAst

该 API 语法:

该 API 作用: 给定一个 AST ,将它进行转换。

babel-core/register

最后再提及一下 。

相信大家可能在网上的教程中有看到是拿这个做 的。这个要被官方在 Babel 7.x 中废弃了,所以大家弃用吧,直接用 就好。

实际上,就是把 这个 npm 包拆解成 和 两个 npm 包了。

很良心地给大家贴上 stackoverflow 上的回答:

They are the same. All babel-core/register does is require('babel-register'). https://github.com/babel/babel/blob/cb8c4172ef740aa562f0873d602d800c55e80c6d/packages/babel-core/register.js#L3

The recommended usage is babel-register since that is the module where the code actually lives, and babel-core/register has been removed in Babel 7.x. Better to depend specifically on the module you use, rather than load it as a side-effect of babel-core.

然后大家可以到那个回答上贴出的链接上去看看,其实就是 包下 文件的内容,我很良心地给大家贴出来:

看到那句 开头的话了吧。

babel-core 与 babel-register 的关系

这个就更简单了。

还是 包下 文件的内容:

就这么短短几行,表明了 依赖于 来实现一些核心的 API 函数。

所以这么使用场景就很清楚了,需要实时转译 ES6 文件,就用 ,简单单一。

需要使用更高级的功能,也就是需要在实时转译时对转译过程和结果要来把控的话,就用 ,利用其 API 来实现。

最后别忘了,使用这两个 npm 包的时候,不能忘了安装和引入我们前几节所说的 和 插件呀!还有 配置文件是一切转译工作进行的前提呀!

结语

有没有感觉本叔写教程还是很清晰,也很良心全面的?!

如果你对本系列教程有好感的话,不妨转发分享给朋友或者票圈,又或者点个赞或者留句话。我想认识更多的读者呢,哈哈哈。

明天会发本系列教程的最后一篇了,谢谢大家这几天的支持。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180125G0M3D400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券