Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >babel入门基础

babel入门基础

作者头像
用户1217459
发布于 2018-01-31 06:26:01
发布于 2018-01-31 06:26:01
98200
代码可运行
举报
文章被收录于专栏:Young DreamerYoung Dreamer
运行总次数:0
代码可运行

背景

babel的官网说babel是下一代的js语法编译器,现在自己也在很多项目中使用了babel,可是自己对babel的认识呢,只停留在从google和别人项目中copy的配置代码上,内心感到很不安,最近花了点时间整理了一下,分享给大伙。

babel常用配置

通常在前端或node项目中,进行以下配置:

入口文件app.babel.js里面配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// babel
require('babel-core/register')({
	presets: ['es2015', 'stage-0']
});
require('babel-polyfill');

require('./app.js');

.babelrc文件中的设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "presets": ["es2015", "stage-0"]
}

babel基础概念

1.babel-core

  新的js语法之前是不存在的,需要将js代码分析抽象的语法树 ,方便各个插件分析语法进行相应的处理成低版本的js;

 2.babel-register 

  改写了require命令,会对.js、jsx、.es、es6 后缀的模块都会先转码,但并不会对当前文件进行转码;由于该转码是实时的,所以不能用在生产环境中。

3.babelrc文件

  babel-core只是生成了语法树,并没有转码,转码工作由插件完成。自从babel升级到6.x之后,babel的插件都是可以插拔的,只有设置了相应的插件,babel才能知道如何处理js代码。

  .babelrc主要对presets、plugins进行设置,其中presets主要是一套预设置的插件,如es-2015、stage-0等,plugins可以让用户选取需要的单个插件。

  目前babel提供了几个官方的preset,主要包括:env es2015 es2016 es2017 flow latest react 。设置presets的时候需要提前npm安装相应的插件,插件名格式:babel-preset-xxx;如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{   "presets": ["es2015"] }

npm install babel-preset-es2015

  如果不需要一套plugins的预设置,可以通过plugins属性引入所需的plugin,比如以下的设置就会引入编译class函数的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{   "plugins": ["transform-es2015-classes"] }

  需要注意的是,某些插件是不被presets预置的,如常用的transform-runtime插件和transform-remove-console插件。

关于presets和plugins的优先顺序一般遵从3个原则:

  • plugins优先于presets进行编译。
  • plugins按照数组的index增序(从数组第一个到最后一个)进行编译。
  • presets按照数组的index倒序(从数组最后一个到第一个)进行编译。
  • 详细信息可以查看官方文档

4.babel-polyfill

  polyfill拥有自定义的regenerator runtime 和core-js;它模拟了ES2015的环境,一般使用在应用程序中,而不是当做库和工具使用;比如说babel-node中自带了babel-polyfill,babel-polyfill为node提供了ES6的REPL环境。REPL,即read-eval-print-loop交互式解释器。详情可参考阮老师的文章

  babel几乎能翻译所有的js新语法,但是对于APIs却并非如此,如新增对象Promise、Set、Map等,静态方法Object.assign等,这就需要创造一个ES6的运行环境。

可以通过babel-polyfill来转码新API,其实现办法就是向全局变量上挂新增的对象或在原型链上增加方法,如在node环境下将Promise挂在global对象上。缺点就是污染全局变量。

  还有一个避免全局污染的方法就是使用babel-runtime + babel-plugins-runtime-transform;babel-runtime 更像是分散的polyfill 模块,我们可以在自己的模块里单独引入,比如 require(‘babel-runtime/core-js/promise’) ,它们不会在全局环境添加未实现的方法,只是这样手动引用每个 polyfill 会非常麻烦。我们借助 Runtime transform 插件来自动化处理这一切。

webpack中如何使用babel

1.使用babel-runtime

需要安装babel-runtime和babel-plugin-transform-runtime

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module: {
    loaders: [{
     loader: 'babel',
     test: /\.js/,
     include: path.join(__dirname, 'src'), 
    query: {
       plugins: ['transform-runtime'], 
       presets: [ 'es2015', 'stage-0'],
     }}]
 }

2.使用babel-polyfi

将babel-polyfill放在入口设置处

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
entry: [ 'babel-polyfill','src/index.js', ], 
module: {   
    loaders: [{
         loader: 'babel',
         test: /\.js/,
         include: path.join(__dirname, 'src'),
         query: {
             presets: ['es2015',  'stage-0']
        }}]
 }

参考资料:

http://www.tuicool.com/articles/vmA3U3R

https://segmentfault.com/a/1190000008159877

https://github.com/brunoyang/blog/issues/20

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布式作业 Elastic-Job-Lite 源码分析 —— 主节点选举
无中心化,意味着 Elastic-Job-Lite 不存在一个中心执行一些操作,例如:分配作业分片项。Elastic-Job-Lite 选举主节点,通过主节点进行作业分片项分配。目前,必须在主节点执行的操作有:分配作业分片项,调解分布式作业不一致状态。
芋道源码
2018/11/22
5930
源码分析ElasticJob分片机制
ElasticJob分片工作机制: 1、ElasticJob在启动时,首先会启动是否需要重新分片的监听器。 代码入口如下:
丁威
2019/06/10
1.7K0
源码分析ElasticJob分片机制
分布式作业 Elastic-Job-Lite 源码分析 —— 注册中心监听器
在《Elastic-Job-Lite 源码分析 —— 作业初始化》「3.2.4」注册作业启动信息,我们看到作业初始化时,会开启所有注册中心监听器:
芋道源码
2018/10/26
8710
分布式做系统 Elastic-Job-Lite 源码分析 —— 作业初始化
作业注册表( JobRegistry ),维护了单个 Elastic-Job-Lite 进程内作业相关信息,可以理解成其专属的 Spring IOC 容器。因此,其本身是一个单例。
芋道源码
2018/09/30
6140
分布式做系统 Elastic-Job-Lite 源码分析 —— 作业初始化
elastic-job-lite 既然去中心化,为何要选举主节点
开篇语 上一篇文章介绍了elastic-job-lite的入门,架构。使用和一些流程,里面提到elastic-job-lite是一个去中心化,轻量级的任务调度框架,那为什么elastic-jib-lite在启动时要选取主节点呢?难道我看错了,哈哈,不可能的,后文 elastic-job-lite简称ejl。 leader选举 ejl定位为轻量级,去中心化,其任务调度由各自的机器驱动,各台机器之间通过zk去协调,ejl为每个任务都创建一个JobScheduler,而在JobScheduler的初始化中回为每个
阿伟
2019/07/22
1.8K0
elastic-job-lite 既然去中心化,为何要选举主节点
源码分析ElasticJob选主实现原理
ElasticJob分布式调度服务器包含两个角色分布为主服务器、从服务器。这里的主从服务器并不是传统意义上的主备。
丁威
2019/06/10
8880
源码分析ElasticJob选主实现原理
分布式作业 Elastic-Job-Lite 源码分析 —— 注册中心
ZookeeperRegistryCenter,基于 Zookeeper 注册中心。从上面的类图可以看到,ZookeeperRegistryCenter 实现 CoordinatorRegistryCenter 接口,CoordinatorRegistryCenter 继承 RegistryCenter 接口。
芋道源码
2018/10/26
1.1K0
elastic-job选主过程
ElasticJob的主服务器的职责是根据当前存活的任务调度服务器生成分片信息,然后拉取属于该分片的任务数据执行任务。为了避免分片信息的不统一,ElasticJob必须从所有的调度服务器中选择一台为主服务器,由该台服务器统一计算分片信息,其他服务根据该分片信息进行任务调度。
leobhao
2022/06/28
5190
elastic-job选主过程
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业失效转移
摘要: 原创出处 http://www.iocoder.cn/Elastic-Job/job-failover/ 「芋道源码」欢迎转载,保留摘要,谢谢! 本文基于 Elastic-Job V2.1.5 版本分享 1. 概述 2. 作业节点崩溃监听 3. 作业失效转移 4. 获取作业分片上下文集合 5. 监听作业失效转移功能关闭 666. 彩蛋 ---- 1. 概述 本文主要分享 Elastic-Job-Lite 作业失效转移。 当作业节点执行作业异常崩溃时,其所分配的作业分片项在下次重新分片之前不会被重新
芋道源码
2018/12/13
7000
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业失效转移
Elastic-Job2.1.5源码-基于Zookeeper分布式锁实现选举作业主节点原理
大家好,本文给大家介绍一下Elastic-Job 基于Zookeeper分布式锁实现选举作业主节点原理,本文主要介绍Elastic-Job如何使用Zookeeper分布式锁进行选举作业主节点,分布式锁的原理和注意事项。
宋小生
2022/12/14
6270
Elastic-Job2.1.5源码-基于Zookeeper分布式锁实现选举作业主节点原理
Elastic-Job2.1.5源码-作业高可用的失效转移功能实现原理动画
失效转移是作业补偿的另外一个场景,作业如果在执行过程中执行节点崩溃了那本次作业将无法正常执行完成,导致作业执行异常,这个时候就需要我们执行失效转移将崩溃的作业分片转移到其他可以正常执行的机器上面进行作业的补偿执行,失效转移的过程一共分为如下几步:
宋小生
2022/12/14
4780
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业监控服务
本文主要分享 Elastic-Job-Lite 作业监控服务。内容对应《官方文档 —— DUMP作业运行信息》。
芋道源码
2018/12/29
6850
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业监控服务
分布式作业系统 Elastic-Job-Lite 源码分析 —— 自诊断修复
ReconcileService 继承 Google Guava AbstractScheduledService 抽象类,实现 #scheduler()、#runOneIteration() 方法,达到周期性校验注册中心数据与真实作业状态的一致性。
芋道源码
2019/02/27
7320
分布式作业系统 Elastic-Job-Lite 源码分析 —— 自诊断修复
分布式作业 Elastic-Job-Lite 源码分析 —— 作业配置
一个作业( ElasticJob )的调度,需要配置独有的一个作业调度器( JobScheduler ),两者是 1 : 1 的关系。这点大家要注意下,当然下文看代码也会看到。
芋道源码
2018/09/30
1.4K0
分布式作业 Elastic-Job-Lite 源码分析 —— 作业配置
分布式作业 Elastic-Job-Lite 源码分析 —— 作业数据存储
JobNodePath,作业节点路径类。作业节点是在普通的节点前加上作业名称的前缀。
芋道源码
2018/10/26
4690
Elastic-Job系列一之执行器注册启动
以springboot为例看下elastic-job的执行器启动流程,启动配置类为elasticjob-lite-spring-boot-starter中的ElasticJobLiteAutoConfiguration,如下
用户9511949
2024/07/07
5200
分布式作业 Elastic-Job-Lite 源码分析 —— 作业分片
1. 概述2. 作业分片条件3. 分配作业分片项4. 获取作业分片上下文集合666. 彩----
芋道源码
2018/12/07
5730
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业监听器
摘要: 原创出处 http://www.iocoder.cn/Elastic-Job/job-listener/ 「芋道源码」欢迎转载,保留摘要,谢谢!
芋道源码
2018/12/19
8370
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业监听器
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业执行
Lite调度作业( LiteJob ),作业被调度后,调用 #execute() 执行作业。
芋道源码
2018/09/30
1.9K0
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业执行
elastic-job失效转移和错过补偿
如果一个任务节点宕机后,则一次任务调度期间,一部分数据将不会被处理,为了解决由于任务节点宕机引起任务一个调度周期的一次任务执行部分数据未处理,可以设置开启故障失效转移,将本次任务转移到其他正常的节点上执行。
leobhao
2022/06/28
1.1K0
推荐阅读
相关推荐
分布式作业 Elastic-Job-Lite 源码分析 —— 主节点选举
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验