Cách viết plugin TypeScript cho Babel và ESLint

Các plugin TypeScript cho Babel và ESLint cho phép các nhà phát triển mở rộng và tùy chỉnh hành vi của các công cụ này để phù hợp với nhu cầu cụ thể của dự án. Babel là trình biên dịch JavaScript phổ biến và ESLint là trình kiểm tra lỗi được sử dụng rộng rãi để đảm bảo chất lượng mã. Viết các plugin tùy chỉnh có thể hợp lý hóa quy trình phát triển và thực thi các tiêu chuẩn mã hóa trong các dự án TypeScript.

Bước 1: Viết một Plugin TypeScript tùy chỉnh cho Babel

Để tạo plugin Babel cho TypeScript, hãy làm theo các bước sau:

1.1 Cài đặt các phụ thuộc bắt buộc

Bắt đầu bằng cách cài đặt Babel và các phụ thuộc cần thiết để xây dựng plugin:

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

1.2 Tạo cấu trúc Plugin

Tiếp theo, tạo cấu trúc cho plugin Babel của bạn:

  • src/index.ts - Điểm vào cho plugin

1.3 Triển khai Plugin Babel

Viết plugin bằng cách xuất một hàm mà Babel sẽ sử dụng để chuyển đổi mã. Sau đây là một ví dụ về plugin chuyển đổi các kiểu 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);
      },
    },
  };
}

Plugin này ghi lại từng bí danh kiểu TypeScript được tìm thấy trong quá trình biên dịch.

1.4 Sử dụng Plugin trong Babel

Để sử dụng plugin, hãy cấu hình Babel bằng cách thêm nó vào .babelrc hoặc babel.config.js của bạn:

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

Bước 2: Viết một Plugin TypeScript tùy chỉnh cho ESLint

Bây giờ, hãy tạo một plugin TypeScript tùy chỉnh cho ESLint. Điều này có thể hữu ích để thực thi các quy tắc kiểm tra lỗi cụ thể cho từng dự án.

2.1 Cài đặt các phụ thuộc bắt buộc

Đầu tiên, hãy cài đặt ESLint và các plugin liên quan đến TypeScript:

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

2.2 Tạo một quy tắc ESLint tùy chỉnh

Trong ví dụ này, chúng tôi sẽ tạo một quy tắc ESLint tùy chỉnh để thực thi quy ước đặt tên cho các giao diện 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 Tích hợp Quy tắc tùy chỉnh

Sau khi viết xong quy tắc, bạn có thể tích hợp nó vào cấu hình ESLint của mình:

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

Bước 3: Kiểm tra và gỡ lỗi plugin

Sau khi viết plugin Babel và ESLint, điều cần thiết là phải kiểm tra chúng. Tạo tệp TypeScript với các mẫu liên quan và chạy Babel hoặc ESLint để xem các plugin có hoạt động như mong đợi không.

Để kiểm tra plugin Babel, hãy chạy:

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

Để kiểm tra plugin ESLint, hãy chạy:

npx eslint src --ext .ts

Phần kết luận

Tạo các plugin TypeScript tùy chỉnh cho Babel và ESLint cho phép kiểm soát chặt chẽ quá trình biên dịch và kiểm tra mã nguồn của bạn. Bằng cách làm theo các bước này, bạn có thể mở rộng cả hai công cụ để phù hợp với nhu cầu cụ thể của dự án và cải thiện trải nghiệm chung của nhà phát triển.