02.ElementUI源码学习:babel配置
书接上文,接下来项目将引入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.示例代码
02.ElementUI源码学习:babel配置的更多相关文章
- 05.ElementUI源码学习:项目发布配置(github pages&npm package)
0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...
- kubernetes源码学习-环境配置篇
下载源码 根据kubernetes github 方式可以 mkdir -p $GOPATH/src/k8s.io cd $GOPATH/src/k8s.io git clone https://gi ...
- 04.ElementUI源码学习:组件封装、说明文档的编写发布
0x00.前言 书接上文.项目经过一系列的配置,开发脚手架已经搭建完毕.接下来开始封装自定义组件.并基于 markdown 文件生成文档和演示案例. 后续文章代码会根据篇幅,不影响理解的情况下进行部分 ...
- 03.ElementUI源码学习:代码风格检查和格式化配置(ESlint & Prettier)
书接上文.在团队协作中,为避免低级Bug.以及团队协作时不同代码风格对彼此造成的困扰与影响,会预先制定编码规范.使用 Lint工具和代码风格检测工具,则可以辅助编码规范执行,格式化代码,使样式与规则保 ...
- element-ui 源码学习
https://athena0304.github.io/element-analysis/ 1.模板字符串实现字符串拼接 typeClass() { return `el-alert--${ thi ...
- 06.ElementUI 2.X 源码学习:源码剖析之工程化(一)
0x.00 前言 在用了5章篇幅 ElementUI源码学习:从零开始搭建Vue组件库汇总 讲解了如何编写一个组件.发布npm以及生成展示文档之后.接下来将分析Element项目的代码结构,学习其工程 ...
- 07.ElementUI 2.X 源码学习:源码剖析之工程化(二)
0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...
- 08.ElementUI 2.X 源码学习:源码剖析之工程化(三)
0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...
- Spring源码学习
Spring源码学习--ClassPathXmlApplicationContext(一) spring源码学习--FileSystemXmlApplicationContext(二) spring源 ...
随机推荐
- Masterboxan INC发布印尼电商市场报告
据海外媒体报导,Masterboxan INC(编号:20151264097)发布了印尼电商市场观察报告,指出印尼电商市场仍然有很大的发展潜力. Masterboxan INC表示,与发达国家从 PC ...
- React Native选择器组件-react-native-slidepicker
react-native-slidepicker 一个纯 JavaScript 实现的的 React Native 组件,用于如地址,时间等分类数据选择的场景. github: https://git ...
- 深入浅出的JS执行机制(图文教程)
前序 作为一个有理想有抱负的前端攻城狮,想要走向人生巅峰,我们必须将我们使用的功法练到天人合一的地步.我在们日常工作中,使用最多的语言就是JavaScript了,为了写出完美的.能装逼的代码,我们必须 ...
- ffmpeg第4篇:为视频添加动态水印
动态分为三种: 水印本身变化 水印显示时间变化 水印位置变化 水印本身变化 看过上一篇的小伙伴可能觉得第一种很简单,把jpg格式的图片换成gif格式的不就可以了吗,然而亲自试一下就会发现,把gif图片 ...
- IntelliJ Idea Error Address localhost 1099 is already in use.
Reference: https://stackoverflow.com/questions/38986910/intellij-idea-address-localhost1099-is-a ...
- 后端程序员之路 35、Index搜索引擎实现分析4-最终的正排索引与倒排索引
# index_box 提供搜索功能的实现- 持有std::vector<ITEM> _buffer; 存储所有文章信息- 持有ForwardIndex _forward_index; ...
- C#的foreach遍历循环和隐式类型变量
C#的foreach遍历循环和隐式类型变量 foreach遍历循环 foreach (<baseType> <name> in <array>>) { //c ...
- Airbnb JavaScript代码规范(完整)
类型Types 基本数据类型 string number boolean null undefined symbol const foo = 1; let bar = foo; bar = 9; co ...
- C# 自定义时间进度条
这篇文章对我帮助极大,我模仿着写了两遍大概摸清楚了自定义控件的流程.https://www.cnblogs.com/lesliexin/p/13265707.html 感谢大佬 leslie_xin ...
- 攻防世界 reverse Mysterious
Mysterious BUUCTF-2019 int __stdcall sub_401090(HWND hWnd, int a2, int a3, int a4) { char v5; // [e ...