Як написати плагіни TypeScript для Babel та ESLint

Плагіни TypeScript для Babel і ESLint дозволяють розробникам розширювати та налаштовувати поведінку цих інструментів відповідно до конкретних потреб проекту. Babel — популярний компілятор JavaScript, а ESLint — широко використовуваний лінтер для забезпечення якості коду. Написання спеціальних плагінів може спростити робочі процеси розробки та забезпечити дотримання стандартів кодування в проектах TypeScript.

Крок 1: Написання спеціального плагіна TypeScript для Babel

Щоб створити плагін Babel для TypeScript, виконайте такі дії:

1.1 Встановити необхідні залежності

Почніть із встановлення Babel і необхідних залежностей для створення плагіна:

npm install --save-dev @babel/core @babel/preset-typescript @babel/plugin-syntax-typescript

1.2 Створіть структуру плагіна

Далі створіть структуру для плагіна Babel:

  • src/index.ts – точка входу для плагіна

1.3 Впровадити плагін Babel

Напишіть плагін, експортувавши функцію, яку Babel використовуватиме для перетворення коду. Ось приклад плагіна, який перетворює типи TypeScript:

import { types as t, NodePath } from '@babel/core';

export default function myTypeScriptPlugin() {
  return {
    visitor: {
      TSTypeAliasDeclaration(path: NodePath<t.TSTypeAliasDeclaration>) {
        // Example: log each TypeScript type alias declaration
        console.log(path.node.id.name);
      },
    },
  };
}

Цей плагін реєструє кожен псевдонім типу TypeScript, знайдений під час компіляції.

1.4 Використовуйте плагін у Babel

Щоб використовувати плагін, налаштуйте Babel, додавши його до .babelrc або babel.config.js:

{
  "presets": ["@babel/preset-typescript"],
  "plugins": ["./path-to-your-plugin"]
}

Крок 2: Написання спеціального плагіна TypeScript для ESLint

Тепер давайте створимо спеціальний плагін TypeScript для ESLint. Це може бути корисним для забезпечення виконання правил лінінгування для конкретного проекту.

2.1 Встановити необхідні залежності

Спочатку встановіть ESLint і його плагіни, пов’язані з TypeScript:

npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin

2.2 Створіть спеціальне правило ESLint

У цьому прикладі ми створимо спеціальне правило ESLint, яке забезпечить угоду про іменування інтерфейсів TypeScript:

import { TSESTree } from "@typescript-eslint/types";
import { Rule } from "eslint";

const rule: Rule.RuleModule = {
  meta: {
    type: "suggestion",
    docs: {
      description: "Enforce interface names to start with I",
      category: "Stylistic Issues",
    },
    schema: [], // no options
  },
  create(context) {
    return {
      TSInterfaceDeclaration(node: TSESTree.TSInterfaceDeclaration) {
        if (!/^I[A-Z]/.test(node.id.name)) {
          context.report({
            node,
            message: "Interface name '{{ name }}' should start with 'I'.",
            data: { name: node.id.name },
          });
        }
      },
    };
  },
};

export default rule;

2.3 Інтегруйте спеціальне правило

Після написання правила ви можете інтегрувати його у свою конфігурацію ESLint:

{
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint"],
  "rules": {
    "my-custom-rule": "error"
  }
}

Крок 3: Тестування та налагодження плагінів

Після написання плагінів Babel і ESLint важливо їх протестувати. Створіть файл TypeScript із відповідними шаблонами та запустіть Babel або ESLint, щоб перевірити, чи плагіни працюють належним чином.

Щоб перевірити плагін Babel, запустіть:

npx babel src --out-dir lib --extensions .ts

Щоб протестувати плагін ESLint, запустіть:

npx eslint src --ext .ts

Висновок

Створення настроюваних плагінів TypeScript для Babel і ESLint дозволяє детально контролювати процес компіляції та лінінгу вашої кодової бази. Виконуючи ці кроки, ви можете розширити обидва інструменти відповідно до конкретних потреб вашого проекту та покращити загальний досвід розробника.