该如何了解babel

前言

首先,你说你不知道babel是啥,影不影响你干活?大概率是不会影响,因为很多人的工作就是一个螺丝钉,只需要按部就班的实现业务就好了,往往对于一些偏工程化的东西不想了解或者说是不知道该从何入手。在我个人的认知里,我认为作为一名程序员,应该对三大方向上随着年限的增长有一个逐步稳定的提升(如果我不能有所提升,那不是等待公司fire掉我,一定是我先fire掉公司)。基础、业务、工程化
基础 是什么,基础好比你是一名web前端,你应该提升你的js css的能力以及各种框架的能力,包括不限于vue生态(或react等)、小程序生态等,这些是你应该具备的最基础的素质,我见过太多人连最基本的js或者css写的一塌糊涂就开始写项目了,公司关注的是什么?是你能不能实现,你各种搜索最终是实现了,等待你的将会是各种bug的修复,这就是为什么会出现改1个bug出来N个bug的原因,因为你的基础不牢。
业务 是什么?业务就是给客户实现的各种功能,不同的场景需要用到什么技术,随着项目的推进,你可以总结出各种应对的方案,在下次遇到类似的场景的时候可以快速实现。
工程化 又是什么?工程化我这里理解为是你的架构能力,正如我开头所问的,你不知道babel影不影响你干活?某些事情是有人给你做了,你才能在那儿安安心心的写业务,这不是凭空就在那儿的你一定要清楚。

babel的概念

老规矩,写此文之前我都会先看看之前作者的写作思路,所以你可以看到我的浏览器页签的状态现在是这样的:

首先你想知道掌握一项技能,得先知道它的概念吧,babel是一个独立存在的东西,它不依赖于webpack,但是在工程化的开发中,往往会利用webpack结合babel去使用。其次,你要掌握它的思想,也是学习了webpack的思想,自己作为一个基座,你想要实现什么功能,就通过presets或者plugins来扩展,像不像webpack的loader和plugin,对吧,所以思想很关键。那么来看下官方对于babel的定义吧:

Babel is a toolchain that is mainly used to convert ECMAScript 2015+ code into a backwards compatible version of JavaScript in current and older browsers or environments

babel主要是用作把es6语法转换 成兼容性的代码的一个工具。当然了,它还可以通过扩展来进行一些jsx以及ts的转换,我们这里不展开。

概念你清楚了,那看看细节,presets是预设,它是一堆plugins的集合。那plugins又是干啥的,也是用作代码转换的,比如你想要自己实现定制化的功能就可以通过插件来实现,如果说presets预设里包含了plugins的功能,那么plugins是不需要再次单独配置的。

关于概念相关的我们最后再了解一下presets以及plugins的执行顺序(我图中标注的1234的顺序):

babel的使用

理解一定是概念结合操作你才能更清晰,来吧,

1.安装先:

terminal 复制代码
npm install --save-dev @babel/core @babel/cli @babel/preset-env

2.创建babel.config.json并加入配置

3.配置启动命令

4.那咱们敲几行代码转转呗(左为源码,右为转换后代码):

babel转换了个寂寞?

原来是ie没了啊,那咱们为了演示babel的效果,配置里给ie强行加上(当然实际开发中不要加ie 重要的事情说一遍!)

再转:

哦豁,果然es6转es5了,那细心的你一定发现了,我前面一直没提的corejs是干啥玩意的,先别急,再敲两行转换:

哦豁,你会发现转换出来的代码给我引进来两个依赖,所以引出了core-js,它的存在是为了兼容浏览器而存在的,他包含所有的api兼容的实现,就是说你这个Promise在低版本浏览器木得,它给你造了一个,所以如果你的运行时依赖如果没有core-js这个依赖的话,你的js可以运行吗?当然是跑不起来。

安装core-js:

版本依赖大于咱们babel中设置的3.6.5,node运行一下咱们得dist目录下的index.js,成功。

babel与webpack搭配

既然你了解了babel,那么与webpack的结合使用那么便是轻松地事情,先来到文档:

点击进入:

可以看到在webpack的使用babel也是非常的简单,babel作为loader被webpack调用,如果你对webpack的loader概念还不熟悉可以翻看我之前写的文章,通过正则匹配js,调用babel-loader实现对js代码的转换,如何配置babel和我们上方的写法是一样的,需要注意的一点是,同样的我们也需要在webpack中安装core-js(一定要明确是运行时依依赖,而不是开发时依赖),因为在最终你打包好的js中,它会把你用到的一些JS的API的兼容方法打包进去。

高手

我是怎么评判一个人是不是真正的高手,如果你掌握一项技能,并且可以站在别人的角度上,以自己的学习过程来分析,如何让对方避免走弯路还能听懂并且掌握,这就是真正的高手。如果你说了一通,别人依然不能形成他自己的理解,那就不是真正的高手,让社会进步的一定不是一两个人的努力,一定是很多很多人一起努力的结果,我知道做这件事很难,因为真正有这种share思想的人一定是有奉献精神的人。

尾声

坚持很容易,但是躺平很难,一路走来,在code的路上也有七八年了,这么多年的几乎都是全程在单兵作战,也走了很多弯路,因为在自学的过程中也会看些教程和文章,很多人要么是直接给你念文档,要么是给你来一套难以理解的原理讲解,这些东西往往对于一个刚刚接触的人来说是很难消化的,我写文章的目的就是让更多的人可以接触某项技能的时候有一个从0到1的过程,因为我一直认为从0到1很难,但是从1到100反而要容易得多。如果你在阅读完此文在你脑中可以对某个概念形成一个完整的脉络,那么就是此文的意义。

相关推荐
222you5 小时前
Claude Code接入DeepSeek-v4模型
java·服务器·前端
轻口味5 小时前
AI 时代全栈开发破局:TypeScript 生态实战,从入门到部署一站式通关
前端·mongodb·docker·ai·typescript·react·next.js
ZC跨境爬虫5 小时前
跟着MDN学HTML_day_45:(EventTarget接口)
前端·javascript·ui·html·媒体
漂移的电子6 小时前
【el-tree】外层多选,某个属性内层单选
前端·javascript·vue.js
BJ-Giser6 小时前
Cesium 体积光阴影率分析和阴影体渲染效果
前端·可视化·cesium
幽络源小助理6 小时前
YK一点资讯Zblog主题源码, 游戏攻略新闻资讯模板
前端·php源码
RPGMZ6 小时前
RPGMZ NPC头顶自动显示一段消息
前端·游戏引擎·rpgmz·rpgmakermz
DFT计算杂谈6 小时前
AMSET 设置多核并行计算
java·前端·css·html·css3
消失的旧时光-19436 小时前
Android / IoT 面试复盘总结:从 MQTT、TLS 到 JWT 权限体系(标准答案 + 工程理解 + 延伸知识链)
android·物联网·面试
花椒技术6 小时前
AI 协同开发落地复盘:1 小时生成首版后,为什么 Review 和修正又花了 2-3 天
前端·人工智能·架构