最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 给我一个 babel,还你一条完整前端工具链

    正文概述 掘金(zxg_神说要有光)   2021-05-25   438

    你不知道的 babel

    提到 babel,你会想到什么?

    • 可以把项目中的 es6、es7 等代码转成目标环境支持的代码
    • 可以自动 polyfill 目标环境不支持的 api
    • taro (小程序转译工具)是基于 babel 实现的
    • babel 的插件很丰富
    • 我们公司现在用 babel 来编译 typescript,不用 tsc 了
    • 我基于 babel 做过自动埋点的功能,得到了领导的夸奖
    • ...

    其实 babel 能做的不只是这些,它能做 3 类事情:

    转译 esnext、typescript、flow 等到目标环境支持的 js

    这个是最常用的功能,用来把代码中的 esnext 的新的语法、typescript 和 flow 的语法转成基于目标环境支持的语法的实现。并且还可以把目标环境不支持的 api 进行 polyfill。

    babel7 支持了 preset-env,可以指定 targets 来进行按需转换,转换更加的精准,产物更小。

    一些特定用途的代码转换

    babel 是一个转译器,暴露了很多 api,用这些 api 可以完成代码到 AST 的 parse,AST 的转换,以及目标代码的生成。

    开发者可以用它来来完成一些特定用途的转换,比如函数插桩(函数中自动插入一些代码,例如埋点代码)、自动国际化、default import 转 named import 等。

    现在比较流行的小程序转译工具 taro,就是基于 babel 的 api 来实现的。

    代码的静态分析

    对代码进行 parse 之后,能够进行转换,是因为通过 AST 的结构能够理解代码。理解了代码之后,除了进行转换然后生成目标代码之外,也同样可以用于分析代码的信息,进行一些检查。

    babel 还能做什么?

    babel 是前端业务开发和工具链开发中必不可少的工具,我们每天都在用,可是你有想过这些问题么:

    • 怎么写一个 babel 插件来做自定义的代码转换?
    • 业务开发中有哪些地方可以用 babel 来做自动化?
    • babel 是怎么实现的?

    还有

    • linter 是怎么实现的?
    • typescript 类型检查是怎么实现的?
    • 压缩混淆工具的原理是什么?
    • 打包工具是如何分析代码依赖关系的?
    • api 文档如何自动生成?

    上面这些都可以用 babel 来实现,或许你并没有想过 babel 有这么大的能量,学会了 babel,绝对能让你提升一个段位

    基于 babel 实现完整工具链

    我们来理一下这些工具的实现思路(所有下面列的工具都有实现代码放在 github)

    自动国际化

    国际化是把写死的字符串字面量换成从资源包取值的方式,babel 可以分析出代码中的字符串字面量,把它替换成一个函数调用语句,然后自动引入资源包。基于 babel,我们完全可以做到自动国际化。

    自动生成 api 文档

    我们在写 api 的时候,会在上方添加注释,那么是不是能把这些注释内容还有关联的函数、class 的信息提取出来,用一定的模版来生成 api 文档呢? 没错,babel 可以做到。

    linter

    我们整天用 eslint、stylelint 来做代码规范的检查,其实他们不过就是对 AST 做了校验,这些我们用 babel 完全可以做到。可以基于 babel 实现 eslint。

    type checker

    typescript 是给代码添加了静态的类型信息,可以在编译期间进行类型检查,也可以辅助做代码的智能提示,现在基本是前端必备技能了。可是你有想过 typescript 怎么实现的么?在小册中我们会手写一个 ts type checker,让你真正理解 typescript!

    压缩混淆

    前端代码上生产肯定要做压缩,做混淆,这个我们整天都在用,可是你知道他的实现原理么,我们能不能用 babel 来实现一下。答案是肯定的,在小册中我们会实现压缩混淆的功能

    js 解释器

    v8 引擎的实现原理是什么,解释型语言都是怎么解释代码的。我们能不能实现一个 js 解释器,是可以的,《babel 插件通关秘籍》小册中我们会基于 babel parser 实现一个 js 解释器。

    手写 babel

    可能你会问,上面的这些都是基于 babel,那如果没有 babel 呢?

    没有 babel 我们就实现一个 babel,小册最后我们会实现一个简易但可用的 babel,让你真正理解 babel 的原理,真正掌握 babel

    上面的解释器和类型检查的内容,王垠卖 12000,见下图,所以这本小册绝对超值。

    给我一个 babel,还你一条完整前端工具链

    给我一个 babel,还你一条完整前端工具链

    大纲

    上面说了很多小册的内容,下面是小册的完整目录:

    给我一个 babel,还你一条完整前端工具链

    不只是 babel

    虽然上面的实战都是基于 babel 的,可是你学到的只是 babel 么?

    不是的,上面的实战案例涉及到完整的工具链,从文档生成、lint、type check、压缩混淆到 js 解释器等等,这几乎是前端开发的闭环了。以此为抓手,学到的是整条工具链的实现思路

    上面的工具还是集中在前端领域,但其中转译器、解释器的实现思路确是通用的,编译原理主要就是学编译器、转译器、解释器三部分,学完整本小册,相信也能帮助你入门编译原理

    总结

    babel 是前端领域几乎是必备的工具,基于它可以完成很多功能,甚至是打造整条工具链,我们在小册中会实现 linter、type cheker、压缩混淆、api 文档自动生成、js 解释器等等一系列功能。其中解释器和类型检查的功能在王垠那里能卖 12000,对比之下,这本小册内容和价格绝对很良心了。

    如果说 babel api 是术,那么基于 babel 学到的编译原理、工具链实现思路就是道了。掌握了 babel、掌握了工具链,入门编译原理,绝对能让你提升一个段位。


    起源地下载网 » 给我一个 babel,还你一条完整前端工具链

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元