Babel入门

摘要:
Babel是一个工具链,主要用于将ES6+代码转换为ES5代码,以便在较旧的浏览器中运行。您还可以使用配置文件来指导代码转换。例如,以下babel.config。js文件告诉Babel只为目标浏览器中不可用的函数加载转换插件。这里,只需要插件名称,不需要完整路径,因为在npm中,babel将自动_模块查找该名称。

Babel是一个工具链,主要用于把ES6+的代码转换为ES5代码,以便在旧版本浏览器中运行。Babel可以做的事情是

1.语法转换

2.通过Polyfill的方式在目标环境中添加缺失的特性(通过@babel/polyfill模块)

3.源码转换

// Babel 输入: ES2015 箭头函数
[1, 2, 3].map((n) => n + 1);

// Babel 输出: ES5 语法实现的同等功能
[1, 2, 3].map(function(n) {
  return n + 1;
});

安装Babel

npm install --save-dev @babel/core @babel/cli @babel/preset-env
npm install --save @babel/polyfill

@babel/core 是Babel的核心库,@babel/cli 是能在终端使用的工具,@babel/preset-env 是一个预设,预设是一组插件的集合。

插件就是一段js程序,用于指导Babel如何转换代码,例如@babel/plugin-transform-arrow-functions插件可以转换箭头函数语法,由于需要转化的语法非常多,所以将一系列插件组合成一个预设来使用,例如@babel/preset-env预设可以支持转换所有js新特性。你也可以使用一个配置文件来指导代码如何进行转化,例如下面的babel.config.js文件告诉Babel只为目标浏览器中没有的功能加载转换插件。

const presets = [
  [
    "@babel/env",
    {
      targets: {
        edge: "17",
        firefox: "60",
        chrome: "67",
        safari: "11.1",
      },
    },
  ],
];

module.exports = { presets };

@babel/polyfill 模块包括 core-js 和一个自定义的 regenerator runtime 模块用于模拟完整的 ES2015+ 环境(上面babel插件只是对新的js语法特性进行转换而不包括一些新的api和Promise新对象等)。polyfill实现这些功能的方式是将Promise之类的新的内置组件和Array.from和Object.asign之类的静态方法添加到全局范围和和内置的原型中。我们在实际使用时不回用到这么多方法,所以会产生很大的浪费。

辛运的是env 预设提供了useBuiltIns配置参数,当此参数值是usage时只会加载所需要的polyfill,配置如下

const presets = [
  [
    "@babel/env",
    {
      targets: {
        edge: "17",
        firefox: "60",
        chrome: "67",
        safari: "11.1",
      },
      useBuiltIns: "usage",
    },
  ],
];

module.exports = { presets };

注意,使用 --save 参数而不是 --save-dev,因为这是一个需要在你的源码之前运行的 polyfill。

如上所示,配置参数时,将插件或预设名和参数对象组成的数组放入presets数组中即可。这里只需要插件名即可而不需要完整的路径,因为在npm中babel会自动在node_modules找那个查找。下面三种方式是等小的

{
  "presets": [
    "presetA",
    ["presetA"],
    ["presetA", {}],
  ]
}

免责声明:文章转载自《Babel入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java生成-zipf分布的数据集(自定义倾斜度,用作spark data skew测试)【转】cloudera新增用户权限配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

React项目创建

前言: 构建React项目的几种方式: 构建:create-react-app 快速脚手架 构建:generator-react-webpack 构建:webpack一步一步构建 一、构建:create-react-app 快速脚手架 FaceBook官方发布了一个无需配置的、用于快速构建开发环境的脚手架工具create-react-app。 crea...

vue前端工程化

今日目标 1.能够了解模块化的相关规范 2.了解webpack3.了解使用Vue单文件组件4.能够搭建Vue脚手架5.掌握Element-UI的使用 1.模块化的分类 A.浏览器端的模块化 1).AMD(Asynchronous Module Definition,异步模块定义)代表产品为:Require.js2).CMD(Common Module D...

vite支持optionalChaining可选链判断运算符和nullishCoalescingOperator

装置 babel 可选链判断运算符,空值合并运算符 兼容依赖 yarn add @babel/plugin-proposal-optional-chaining --dev yarn add @babel/plugin-proposal-nullish-coalescing-operator -dev react中: vite.config.ts增加...

react 简单搭建

1.新建一个文件夹 2.执行npm init 3.整理新建工程目录结构,包含必要文件index.html 和 index.js 4.安装react 、react-dom 5. 安装webpack(穿件webpack.config.js文件) npm install --save-dev webpack 6.安装Babel编译器(创建babel.confi...

webpack4.x最详细使用讲解一

前言 本文主要从webpack4.x入手,会对平时常用的Webpack配置一一讲解,各个功能点都有对应的详细例子,所以本文也比较长,但如果你能动手跟着本文中的例子完整写一次,相信你会觉得Webpack也不过如此。 一、什么是webpack,为什么使用它? ​ 1.1 什么是webpack? 简单来说,它其实就是一个模块打包器。 1.2 为什么使用它? 如果...

vue 常见错误

  1. ERROR in ./.nuxt/client.js friendly-errors 10:13:25 Module build failed (from ./node_modules/babel-loader/lib/index.js): friendly-errors 10:13:25 Error: [BABEL] E:vscodeWork1...