08-babel

news/2025/2/12 10:40:31/

babel命令行使用

  • babel本身可以作为一个独立的工具(和postcss一样),不和webpack等构建工具配置来单独使用

  • 如果我们希望在命令行尝试使用babel,需要安装如下库

    • @babel/core:babel的核心代码,必须安装;
    • @babel/cli:可以让我们在命令行使用babel;
    npm install @babel/cli @babel/core
    
  • 使用babel来处理我们的源代码

    • src:是源文件的目录;
    • –out-dir:指定要输出的文件夹dist;
    npx babel src --out-dir dist
    

插件的使用

  • 比如我们需要转换箭头函数,那么我们就可以使用箭头函数转换相关的插件

    npm install @babel/plugin-transform-arrow-functions -D
    npx babel src --out-dir dist --plugins=@babel/plugin-transform-arrow-functions
    
  • 查看转换后的结果:我们会发现 const 并没有转成 var

    • 这是因为 plugin-transform-arrow-functions,并没有提供这样的功能
    • 我们需要使用 plugin-transform-block-scoping 来完成这样的功能
npm install @babel/plugin-transform-block-scoping -D 
npx babel src --out-dir dist --plugins=@babel/plugin-transform-block-scoping,@babel/plugin-transform-arrow-functions

babel的预设preset

  • 但是如果要转换的内容过多,一个个设置是比较麻烦的,我们可以使用预设(preset)
  • 安装@babel/preset-env预设:npm install @babel/preset-env -D
  • npx babel src --out-dir dist --presets=@babel/preset-env

babel的底层原理

  • babel是如何做到将我们的一段代码(ES6、TypeScript、React)转成另外一段代码(ES5)的呢
  • 从一种源代码(原生语言)转换成另一种源代码(目标语言),这是什么的工作呢?
    • 就是编译器,事实上我们可以将babel看成就是一个编译器。
    • Babel编译器的作用就是将我们的源代码,转换成浏览器可以直接识别的另外一段源代码
  • Babel也拥有编译器的工作流程
    • 解析阶段(Parsing)
    • 转换阶段(Transformation)
    • 生成阶段(Code Generation)

babel-loader

  • 在实际开发中,我们通常会在构建工具中通过配置babel来对其进行使用的,比如在webpack中

  • 那么我们就需要去安装相关的依赖:npm install babel-loader @babel/core

  • 我们可以设置一个规则,在加载js文件时,使用我们的babel:

    module:{rules:[{test:/.m?js$/,use:{loader:'babel-loader'        } }   ]
    }
    

指定使用的插件

module:{rules:[test:/.m?js$/,use:{loader:'babel-loader',options:{plugins:["@babel/plugin-transform-arrow-functions",     "@babel/plugin-transform-block-scoping"  ]            }     }    ]
}

babel-preset

npm install @babel/preset-env

test:/.m?js$/,
use:{loader:'babel-loader',options:{ presets: [["@babel/preset-env"]   ]                          }     
}  

设置目标浏览器 targets

  • 默认适配browserslist,配置的targets属性会覆盖browserslist;
  • 但是在开发中,更推荐通过browserslist来配置,因为类似于postcss工具,也会使用browserslist,进行统一浏览器 的适配;
test:/.m?js$/,
use:{loader:'babel-loader',options:{ presets: [["@babel/preset-env",{target:"last 2 version"          }]   ]                          }     
} 

Stage-X的preset

  • Stage 0:strawman(稻草人),任何尚未提交作为正式提案的讨论、想法变更或者补充都被认为是第 0 阶段的稻草人”;
  • Stage 1:proposal(提议),提案已经被正式化,并期望解决此问题,还需要观察与其他提案的相互影响:
  • Staae2:draft(草稿),Staae2的提案应提供规范初稿。草稿。此时,语言的实现者开始观察 runtime 的具体实现是否合理;
  • Staae3:candidate(候补),Staae3提案是建议的候选提案。在这个高级阶段,规范的编辑人员和评审人员必
    须在最终规范上签字。Staae 3 的提案不会有太大的改变,在对外发布之前只是修正一些问题:
  • Stage4:finished(完成),进入 Stage4 的提案将包含在 ECMAScript的下一个修订版中;

babel的配置文件

  • babel配置文件的两种方式
    • babel.config.json(或者.js,.cjs,.mjs)文件;
    • .babelrc.json(或者.babelrc,.js,.cjs,.mjs)文件
  • 它们两个有什么区别呢?目前很多的项目都采用了多包管理的方式(babel本身、element-plus、umi等);
    • .babelrc.json:早期使用较多的配置方式,但是对于配置Monorepos项目是比较麻烦的
    • babel.config.json(babel7):可以直接作用于Monorepos项目的子包,更加推荐

http://www.ppmy.cn/news/502327.html

相关文章

基于SpringBoot的电子文档管理系统(源码、文档、数据库)

网上文件管理系统所用的资料库是由 SpringBoot架构所建立的 Mysql资料库。在进行设计的时候,要充分地保证了系统代码拥有良好的可读性、实用性、易扩展性、通用性、便于后期维护、操作容易、页面简洁等优势。 一、开发工具及技术介绍 (1).J…

基于 Flink CDC 构建 MySQL 到 Databend 的 实时数据同步

这篇教程将展示如何基于 Flink CDC 快速构建 MySQL 到 Databend 的实时数据同步。本教程的演示都将在 Flink SQL CLI 中进行,只涉及 SQL,无需一行 Java/Scala 代码,也无需安装 IDE。 假设我们有电子商务业务,商品的数据存储在 My…

JMeter 批量接口测试

一、背景 最近在进行某中台的接口测试准备,发现接口数量非常多,有6、70个,而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值。想了几种方案后,决定尝试使用JMeter的csv读取来实现批量的接口…

红米Note9和红米Note9Pro的区别

1、屏幕方面 这两款手机都是120Hz的LCD屏幕,不支持屏下指纹,支持侧边指纹 红米手机爆降800这活动太给力了 机会不容错过 https://www.xiaomi.cn 2、性能方面 红米Note9采用天玑800U 红米Note9Pro采用骁龙750G 3、拍照方面 红米Note9采用2000万前置&…

红米note9和红米note9s有什么区别

红米note9有着一块6.67英寸的LCD屏幕,分辨率为2400x1080像素,最高支持90Hz的刷新率。 红米手机爆降500这活动太给力了 机会不容错过 https://www.xiaomi.com.cn 红米note9同样采用了6.67英寸的LCD屏幕,2400x1080像素分辨率,91%屏占…

红米Note9和RealmeQ2参数对比哪个好

红米note9屏幕为6.53″ 小孔全面屏,分辨率2340 x1080 FHD,屏幕亮度1nit ~450nit(typ),支持阳光屏 | 夜光屏 | 经典护眼模式 | 无级色温调节,,康宁️第5 代大猩猩️玻璃。realmeQ2屏幕为6. 5 英寸…

红米note9性价比不高,realme Q2更值得选择,性价比手机市场变局将现

小米在今天正式发布了千元5G手机红米note9,这款手机在配置方面与性价比手机市场新兵realme的Q2高度相似,价格嘛显然Q2更便宜一些,具体如何选,一起来看看。 未来进行更直观的对比,笔者直接列举了两款手机的存在差异的地…

三星note9刷Android9,三星Note9官方港版安卓9固件rom刷机包:TGY-N9600ZHS1CSD1

三星Galaxy Note9手机的港版手机SM-N9600的最新系统包发布了,系统版本是TGY-N9600ZHS1CSD1,是安卓9的系统包,完整版多件套形式的rom包,是官方在4月25日更新发布的,港版手机可以下载下来进行系统的升级更新用了。 三星N…