Bootstrap

从 CLI 到 API:探索 Prettier 格式化的奥秘 (4)

Prettier APIs

Prettier 不仅提供了一个强大的命令行界面 (CLI),还提供了丰富的 API,允许开发者在 Node.js 环境中直接调用 Prettier 进行代码格式化。这些 API 使得 Prettier 可以集成到各种自动化工具和脚本中。

prettier.format(source, options)

prettier.format 是 Prettier 中最核心的 API,用于格式化代码。它接受两个参数:

  • source:需要格式化的源代码字符串。
  • options:格式化选项对象,可以包含各种配置项,如 singleQuoteprintWidthsemi 等。
示例

下面是一个使用 prettier.format 进行代码格式化的例子:

const prettier = require("prettier");
const fs = require("fs");
const path = require("path");

// 书写 prettier 规则配置
const options = {
  singleQuote: false,
  printWidth: 50,
  semi: false,
  trailingComma: "es5",
  parser: "babel", // 指定解析器
};

// 读取 src 目录
fs.readdir("src", (err, files) => {
  if (err) throw err;

  for (let i = 0; i < files.length; i++) {
    // 拼接路径
    const sourcePath = path.resolve("src", files[i]);

    // 读取源码文件
    const jsSource = fs.readFileSync(sourcePath, "utf8");

    // 使用 prettier.format 来进行格式化
    prettier.format(jsSource, options).then((formattedCode) => {
      // 将格式化好的结果重新写入到原来的文件里面
      fs.writeFileSync(sourcePath, formattedCode, "utf-8");
    });
  }
  console.log("格式化完毕...");
});

注意:

  • 在使用 prettier.format 时,必须指定 parser 选项,以告诉 Prettier 如何解析源代码。常见的解析器包括 babeltypescriptflow 等。
  • 你可以通过 Prettier 官方文档 查看支持的所有解析器。
prettier.check(source, [options])

prettier.check 用于检查给定的源代码是否已经按照 Prettier 的规则进行了格式化。如果代码已经格式化,则返回 true;否则返回 false

示例

下面是一个使用 prettier.check 检查 src 目录下所有文件是否已经格式化的例子:

const prettier = require("prettier");
const fs = require("fs");
const path = require("path");

// 书写 prettier 规则配置
const options = {
  singleQuote: false,
  printWidth: 50,
  semi: false,
  trailingComma: "es5",
  parser: "babel", // 指定解析器
};

fs.readdir("src", async (err, files) => {
  if (err) throw err;

  let isAllFormatted = true;
  for (let i = 0; i < files.length; i++) {
    // 拼接路径
    const sourcePath = path.resolve("src", files[i]);

    // 读取源码文件
    const jsSource = fs.readFileSync(sourcePath, "utf8");

    // 检查文件是否已经格式化
    const isFormatted = await prettier.check(jsSource, options);

    if (!isFormatted) {
      // 说明这个文件没有被格式化
      console.log(`${files[i]} 文件还没有格式化`);
      isAllFormatted = false;
    }
  }
  if (isAllFormatted) {
    console.log("所有文件都已经格式化...");
  }
});

总结

  • prettier.format:用于格式化代码,接受源代码字符串和格式化选项作为参数。
  • prettier.check:用于检查代码是否已经格式化,返回布尔值。

通过这些 API,你可以在 Node.js 环境中灵活地使用 Prettier 进行代码格式化和检查。

;