书接上文,接下来项目将引入babel支持ES6+语法兼容。

Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。中文官网

0x00.babel概念

Babel 是一个编译器(输入源码 => 输出编译后的代码)。编译过程分为三个阶段:解析、转换和打印输出。

Babel 本身不具有任何转化功能,它把转化的功能都分解到一个个plugin 里面。因此当我们不配置任何插件时,经过 babel 的代码和输入是相同的。

插件(Plugins)

插件总共分为两种:语法插件(Syntax Plugins)和转译插件(Transform Plugins)。

  • 转换插件用于转换你的代码。
  • 语法插件只允许Babel解析(parse)特定类型的语法(而不是转换)。

转换插件会自动启用语法插件。因此,如果你已经使用了相应的转换插件,则不需要指定语法插件。

具体插件列表,详见官方文档。 Plugins

预设(Presets)

presets可以看作一组预先设定的插件列表集合,我们可以不必再当独地一个一个地去添加我们需要的插件。

配置文件

babel提供了config的方式,类似于webpack的cli方式以及config方式。官方文档

babel 7.X 之后,引入了babel.config.json (支持.js, .cjs, .mjs等文件格式);在7.X之前,项目都是基于.babelrc(支持.json,.js, .cjs, .mjs等文件格式)来进行配置。

一般babel.config.json会放置在根目录下,在执行编译时,babel会首先去寻找babel.config.json文件,以此来作为整个项目的根配置。

babel.config.json 配置示例

{
"presets": ["@babel/env"],
"plugins": ["transform-vue-jsx"]
}

插件的短名称

如果插件名称的前缀为 babel-plugin-,你还可以使用它的短名称:

{
"plugins": [
"myPlugin",
"babel-plugin-myPlugin" // 两个插件实际是同一个
]
}

适用于带有冠名(scope)的插件:

{
"plugins": [
"@org/babel-plugin-name",
"@org/name" // 两个插件实际是同一个
]
}

预设的短名称

如果 preset 名称的前缀为 babel-preset-,你还可以使用它的短名称:

{
"presets": [
"myPreset",
"babel-preset-myPreset" // equivalent
]
}

适用于带有冠名(scope)的 preset:

{
"presets": [
"@org/babel-preset-name",
"@org/name" // equivalent
]
}

执行顺序

  • 插件执行顺序在presets之前
  • 插件会按照声明的插件列表顺序顺序执行(first to last)
  • preset会按照声明的列表顺序逆序执行(last to first)

参考

https://www.cnblogs.com/rynxiao/p/13665506.html

https://babeljs.io/docs/en/config-files

0x01.babel安装与配置

安装所需包(package)

项目中引入bable(babel 7.0 以后的插件与预设以@babel为前缀)。

@babel/cli 内置的 CLI 命令行工具,可通过命令行编译文件。官方文档

@babel/core babel的核心,包含各个核心的API,供babel插件和打包工具使用。官方文档

@babel/preset-env 是一个常用的预设(Presets), 让你能使用最新的JavaScript语法, 它会帮你转换成代码的目标运行环境支持的语法, 提升你的开发效率并让打包后的代码体积更小。相关参考

webpack loader 模块安装

JSX语法模块安装

JSX语法插件使用babel-plugin-syntax-jsx,没有使用高版本的@babel/plugin-syntax-jsx,项目运行中后者会出现 Cannot find module babel-plugin-syntax-jsx 异常。

功能验证

上述模块安装完毕后,在test目录下,创建一个名为babel-es6-test.js的文件

在命令行窗口输入以下指令,编译整个test文件夹并输出到lib(不存在则自动创建)文件夹中

成功运行后,项目lib目录下也会创建一个babel-es6-test.js的文件,跟test目录下的文件是相同的,代码没有进行转换。

Babel 本身不具有任何转化功能,不配置任何插件时,经过 babel 的代码和输入是相同的。

在根目录下创建babel.config.json文件,配置如下:

再次运行指令,lib下输出文件代码已经转换

项目配置

更新babel.config.json配置

webpack.config.js添加一条关于babel-loader的规则:

目录examples新增文件JSX.vue用来测试JSX语法

更新examples\App.vue文件,引入JSX.vue组件

运行npm run dev,打开浏览器,成功解析结果如下

最新目录结构

0x02.示例代码

Github Repo

02.ElementUI源码学习:babel配置的更多相关文章

  1. 05.ElementUI源码学习:项目发布配置(github pages&npm package)

    0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...

  2. kubernetes源码学习-环境配置篇

    下载源码 根据kubernetes github 方式可以 mkdir -p $GOPATH/src/k8s.io cd $GOPATH/src/k8s.io git clone https://gi ...

  3. 04.ElementUI源码学习:组件封装、说明文档的编写发布

    0x00.前言 书接上文.项目经过一系列的配置,开发脚手架已经搭建完毕.接下来开始封装自定义组件.并基于 markdown 文件生成文档和演示案例. 后续文章代码会根据篇幅,不影响理解的情况下进行部分 ...

  4. 03.ElementUI源码学习:代码风格检查和格式化配置(ESlint & Prettier)

    书接上文.在团队协作中,为避免低级Bug.以及团队协作时不同代码风格对彼此造成的困扰与影响,会预先制定编码规范.使用 Lint工具和代码风格检测工具,则可以辅助编码规范执行,格式化代码,使样式与规则保 ...

  5. element-ui 源码学习

    https://athena0304.github.io/element-analysis/ 1.模板字符串实现字符串拼接 typeClass() { return `el-alert--${ thi ...

  6. 06.ElementUI 2.X 源码学习:源码剖析之工程化(一)

    0x.00 前言 在用了5章篇幅 ElementUI源码学习:从零开始搭建Vue组件库汇总 讲解了如何编写一个组件.发布npm以及生成展示文档之后.接下来将分析Element项目的代码结构,学习其工程 ...

  7. 07.ElementUI 2.X 源码学习:源码剖析之工程化(二)

    0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...

  8. 08.ElementUI 2.X 源码学习:源码剖析之工程化(三)

    0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...

  9. Spring源码学习

    Spring源码学习--ClassPathXmlApplicationContext(一) spring源码学习--FileSystemXmlApplicationContext(二) spring源 ...

随机推荐

  1. DENIEL SOIBIM:如何保持坚持

    丹尼尔·索比姆作为加州理工高材生,在2005年通过创建投资俱乐部对潜力公司进行天使投资,获得了美国Blue Run高层的重视,并相继担任Blue Run潜力营收专家评估师,2009年成为星盟集团的副总 ...

  2. NGK公链大事件盘点——回顾过去,展望未来!

    NGK公链构想广阔,愿景宏大,2020年10月NGK正式上线,同时NGK全球发布会正式启动,建立区块链生态体系. 早在这之前,NGK就经过了紧锣密鼓的数年缜密搭建. 2018年6月NGK底层系统技术原 ...

  3. 比起USDT,我为什么建议你选择USDN

    2018年1月16日,USDT(泰达币)进入了很多人的视野.因为在这一天,在全球价值排名前50的加密货币中,包括比特币.莱特币以及以太坊在内的大多数的数字虚拟加密货币都遭遇了价格大幅下跌,只有泰达币价 ...

  4. ffmpeg:为视频添加静态水印

    在ffmpeg中,添加水印需要用overlay滤镜,这是一个复杂滤镜,因为它需要两个输入,默认第一个输入是主画面,第二输入为水印,先执行一个简单的看看. 下面有两个文件,一个是可爱的大雄兔,一个是可爱 ...

  5. 翻译:《实用的Python编程》02_03_Formatting

    目录 | 上一节 (2.2 容器) | 下一节 (2.4 序列) 2.3 格式化 虽然本节稍微有点离题,但是当处理数据时,通常想要生成结构化的输出(如表格).示例: Name Shares Price ...

  6. Java基本概念:继承

    一.简介 描述: 现实世界中的继承无处不在.比如:动物细分有哺乳动物.爬行动物等,哺乳动物细分有灵长目.鲸目等. 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模. 继承是类和类之间的一种关 ...

  7. nacos服务注册与发现之客户端

    服务注册 1.1 NamingService.registerInstance的方法为客户端提供的服务注册接口 1.2 客户端通过调用NamingService.registerService上报到n ...

  8. vue3中使用axios如何去请求数据

    在vue2中一般放在created中,但是在vue3中取消了created生命周期,请求方式有两种 直接在setup中去获取数据 setup(props) { const data = reactiv ...

  9. LeetCode674. 最长连续递增序列

    原题链接 1 class Solution: 2 def findLengthOfLCIS(self, nums: List[int]) -> int: 3 ans = begin = 0 4 ...

  10. Win10下ctrl与alt键互换

    我之前尝试过用第三方软件修改,但是总是不成功,后来发现直接去修改注册表也不麻烦,记录一下步骤. win + r 输入 regedit 进到这个路径 点击Keyboard Layout 右键,新建一个 ...