首页 > 其他分享 >[Babel] Intro Babel - 05. API

[Babel] Intro Babel - 05. API

时间:2025-01-16 21:13:39浏览次数:1  
标签:const 函数 Babel Object API babel Intro options

APIs

关于 babel 里面的 APIs 主要位于 @babel/core 这个依赖里面,你可以在官网左下角的 Tooling Packages 分类下找到这个依赖包。

这里顺便介绍一下每一种依赖包的作用:

  • @babel/parser: 是 Babel 的解析器,用于将源代码转换为 AST
  • @babel/core: Babel 的核心包,它提供了 Babel 的核心编译功能。这个包是使用 Babel 必须安装的。
  • @babel/generator: 是 Babel 的代码生成器,它接收一个 AST 并将其转换为代码和源码映射(sourcemap)。
  • @babel/code-frame: 提供了一种用于生成 Babel 错误消息的方法,可以在代码帧中高亮显示错误。
  • @babel/runtime: 提供了 Babel 运行时所需要的辅助函数和 polyfills,以避免在每个文件中都重复这些代码。
  • @babel/template: 提供了一种编写带有占位符的 Babel AST 模板的方法。
  • @babel/traverse: 是 BabelAST 遍历器,它包含了一些用于处理 AST 的工具。
  • @babel/types: 提供了一种用于 AST 节点的 Lodash-esque 实用程序库。

在第一节课的时候,我们安装了三个依赖:core、cli、preset,但是我们使用 babel 进行编译的时候发现最终是生成了编译后的代码的,而从 AST 生成编译后代码是 generator 的工作,实际上当你安装 core 的时候,就会间接的安装 generator、traverse 等需要用到的依赖包。

通过对官方 API 的观察,我们发现 babel/core 的 API 主要分为三大类:

  • transformXXX
  • parseXXX
  • loadXXX

transformXXX

这一组方法一看就是做和编译相关的操作,之所以有这么多,其实就是同步或者异步、编译代码或者文件的区别,每个方法的具体含义如下:

  • transform(code: string, options: Object): 这是一个异步函数,用于将源代码字符串转换为 Babel 的结果对象。结果对象包含了转换后的代码,源码映射,以及 AST
  • transformSync(code: string, options: Object): 这个函数和 transform 函数功能相同,但它是同步执行的。
  • transformAsync(code: string, options: Object): 这个函数和 transform 函数功能相同,它返回一个 Promise,这个 Promise 会在转换完成后解析为结果对象。
  • transformFile(filename: string, options: Object, callback: Function): 这个函数会读取并转换指定的文件。转换完成后,会调用提供的回调函数,并将结果对象传递给回调函数。
  • transformFileSync(filename: string, options: Object): 这个函数和 transformFile 函数功能相同,但它是同步执行的。
  • transformFileAsync(filename: string, options: Object): 这个函数和 transformFile 函数功能相同,它返回一个 Promise,这个 Promise 会在转换完成后解析为结果对象。
  • transformFromAst(ast: Object, code: string, options: Object): 这个函数接受一个 AST 对象,然后将这个 AST 转换为 Babel 的结果对象。这个函数可以用于在已经有 AST 的情况下避免重新解析代码。
  • transformFromAstSync(ast: Object, code: string, options: Object): 这个函数和 transformFromAst 函数功能相同,但它是同步执行的。
  • transformFromAstAsync(ast: Object, code: string, options: Object): 这个函数和 transformFromAst 函数功能相同,它返回一个 Promise,这个 Promise 会在转换完成后解析为结果对象。

上面这些方法中,只要搞懂一个,其他的也就搞懂了。

parseXXX

该系列方法主要负责将源码转为抽象语法树(AST),之后就不管了。

  • parse(code: string, options: Object): 这是一个异步函数,用于解析源代码字符串并返回一个 AST。你可以通过选项对象来配置解析过程,例如是否包含注释,是否包含 location 信息等。

  • parseSync(code: string, options: Object): 这个函数和 parse 函数功能相同,但它是同步执行的。

  • parseAsync(code: string, options: Object): 这个函数和 parse 函数功能相同,它返回一个 Promise,这个 Promise 会在解析完成后解析为 AST

loadXXX

这一系列方法主要是做配置文件的加载工作的

  • loadOptions(options: Object): 这个函数接受一个选项对象,然后返回一个完整的、已解析的 Babel 配置对象。这个配置对象包括了所有的预设,插件,和其他配置选项。如果提供的选项对象中没有指定配置,那么这个函数会尝试从 .babelrc 文件或 babel.config.js 文件中加载配置。

    例如:

    const babel = require('@babel/core');
    
    const options = {
      filename: './src/myFile.js',
    };
    
    const config = babel.loadOptions(options);
    
    console.log(config);
    

    在这个例子中,我们首先导入了 @babel/core,然后定义了一个选项对象。这个对象中,filename 属性指定了我们正在处理的文件的路径。然后我们使用 @babel/coreloadOptions 方法来加载 Babel 的配置。

    loadOptions 方法返回一个配置对象,这个对象包括了所有的预设,插件,和其他配置选项。在这个例子中,我们将这个配置对象打印到控制台。

  • loadPartialConfig(options: Object): 这个函数和 loadOptions 函数类似,但是返回的配置对象可能是部分的,也就是说,它可能没有包括所有的预设和插件。这个函数主要用于在构建工具中,当你需要对 Babel 配置进行更精细的控制时。

Code


// file name: transform.js

const babel = require("@babel/core");

const code =
  'const greet = (name) => `Hello, ${name}!`;console.log(greet("World"));';

babel.transform(
  code,
  {
    presets: ["@babel/preset-env"],
  },
  function (err, result) {
    if (err) throw err;
    console.log(result.code);
  }
);


// filename: transformFile.js

const fs = require("fs");
const path = require("path");
const babel = require("@babel/core");

// 设置路径
const srcDir = path.resolve(__dirname, "src");
const outDir = path.resolve(__dirname, "dist");

if (!fs.existsSync(outDir)) {
  fs.mkdirSync(outDir);
}

fs.readdir(srcDir, (err, files) => {
  if (err) throw err;
  files.forEach((file) => {
    if (path.extname(file) === ".js") {
      const filePath = path.join(srcDir, file);
      const outputPath = path.join(outDir, file);

      const result = babel.transformFileSync(filePath, {
        presets: ["@babel/preset-env"],
      });

      fs.writeFileSync(outputPath, result.code);
    }
  });
});


//parse.js

const babel = require("@babel/core");

const code =
  'const greet = (name) => `Hello, ${name}!`;console.log(greet("World"));';


  babel.parse(code,(err, ast)=>{
    if (err) throw err;

    console.log(JSON.stringify(ast, null, 2));
  })


// filename: load options.js

const babel = require("@babel/core");

const options = {
  filename: "./src/myFile.js",
};

const config = babel.loadOptions(options);

console.log(config);

标签:const,函数,Babel,Object,API,babel,Intro,options
From: https://www.cnblogs.com/Answer1215/p/18675751

相关文章

  • [Babel] Intro Babel - 02 Configure file
    配置文件配置文件格式配置文件选项配置文件的格式在babel中,配置文件本身又可以分为两种:项目范围的配置文件文件相关配置文件项目范围配置文件顾名思义,就是该配置文件针对整个项目生效的一个配置,这种类型的配置文件一般放在项目根目录下面,babel对项目范围级别的配置......
  • [Babel] Intro Babel - 03. CLI
    CLI关于babel所提供的CLI,你可以在https://babeljs.io/docs/babel-cli看到所有所支持的CLI命令。要使用CLI命令,首先第一步是安装:pnpmadd--save-dev@babel/core@babel/cli注意在安装@babel/cli这个包的时候,需要同时安装@babel/core这个包,这个包是提供babel......
  • 【微服务】使用 Apifox、Postman 测试 Dubbo 服务,Apache Dubbo OpenAPI 即将发布
    ApacheDubboOpenAPI简介1.1设计背景在微服务体系中,RPC服务的文档管理、测试、调用协作一直都是影响研发效能的关键一环,这些难题通常是由于RPC的特性所决定的:RPC服务的定义方式、RPC协议格式不一,缺少放之宇宙而皆准的统一规范。长期以来,ApacheDubbo的开发者们也面临同......
  • Babel Intro Babel - 01 Introduction
    Babel介绍Babel是一个编译器,主要用于将最新的JavaScript代码转化为向后兼容的代码,以便在老版本的浏览器或环境中运行。例如,你可能在开发时使用了ES6、ES7或者更高级的JavaScript特性,但是有些浏览器可能并不支持这些新特性,这时就可以用Babel来将代码转化为ES5或者更早......
  • 使用Python爬虫获取1688网站item_get_company API接口的公司档案信息
    一、引言在当今的商业环境中,获取供应商的详细信息对于采购决策、市场分析和供应链管理至关重要。1688作为中国领先的B2B电子商务平台,提供了丰富的供应商档案信息。通过使用1688的item_get_companyAPI接口,我们可以方便地获取这些信息。本文将详细介绍如何使用Python爬虫来调用该A......
  • php禁止跨域调用api(来自文心快码)
    在PHP中,禁止跨域调用API通常涉及到设置正确的HTTP响应头,以告知浏览器不允许来自不同源的请求。跨域资源共享(CORS)是一个W3C标准,它允许服务器放宽同源策略(SOP),从而允许某些跨站请求。要禁止跨域调用,你需要配置服务器以拒绝这些请求。以下是一些在PHP中禁止跨域调用的方法:1.使用.hta......
  • 深入探索Vue.js 3中基于Composition API的动态组件开发
    在前端开发中,组件是构建用户界面的基础,而Vue.js作为一种流行的前端框架,也提供了灵活强大的组件机制。在本文中,我们将深入探索基于Vue.js3的CompositionAPI,开发一个动态组件加载的技术方案。这项技术对于那些需要高可维护性和按需加载的应用来说尤其重要。什么是动态组件加......
  • 一步一步教你打造实用API接口
    在当今的软件开发领域,API(应用程序编程接口)已经成为不同系统之间数据交互的基石。一个设计良好、功能实用的API接口不仅能够提升系统的可扩展性和灵活性,还能极大地提高开发效率。本文将详细指导你如何一步一步地打造一个实用的API接口。一、明确API接口的需求与目标在动手之前,首......
  • 【答题系统可参考】php 禁止api被跨域调用
    在PHP中,防止API被跨域调用可以通过设置适当的HTTP响应头来实现。跨域资源共享(CORS,Cross-OriginResourceSharing)机制允许或拒绝来自不同源的请求。为了禁止跨域调用,你可以在你的PHP脚本中设置 Access-Control-Allow-Origin 头为 null 或者不设置这个头。下面是一个......
  • API Parrot:破解没有公开接口的网站
    在数字化浪潮中,开发者们常常面临一个挑战:如何高效地自动化、集成或抓取那些没有公开API的网站数据?今天,我要给大家介绍一款强大的工具——APIParrot,它绝对是开发者们的新利器!APIParrotAPIParrot是一款专门设计用于反向工程任何网站HTTPAPI的工具。它为开发者提供了一站......