0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

🚀 Đơn giản hóa nhập khẩu với Path Aliases TypeScript

Đăng vào 6 ngày trước

• 6 phút đọc

🚀 Đơn Giản Hóa Nhập Khẩu Với Path Aliases TypeScript

Nếu bạn đã từng làm việc trên một dự án TypeScript bất kỳ kích thước nào, bạn có thể đã gặp phải tình trạng rối ren với các import tương đối:

Copy
import { UserService } from '../../../services/user';

Điều này không chỉ xấu mà còn khó quản lý, đặc biệt là khi dự án của bạn phát triển. May mắn thay, Path Aliases TypeScript đã đến để cứu cánh. Và tốt hơn nữa, gói npm ts-path-alias-fixer có thể giúp bạn tự động chuyển đổi toàn bộ mã nguồn từ các import tương đối sang các đường dẫn alias gọn gàng và dễ quản lý.

Trong bài viết này, chúng ta sẽ tìm hiểu:

  • Path Aliases là gì
  • Cách cấu hình chúng trong TypeScript
  • Cách sử dụng ts-path-alias-fixer để tái cấu trúc mã hiện có

📌 Path Aliases TypeScript Là Gì?

Path aliases cho phép bạn định nghĩa các tên tùy chỉnh cho các thư mục trong dự án của bạn. Thay vì viết như sau:

Copy
import { ProductService } from '../../../../core/services/ProductService';

Bạn có thể làm như sau:

Copy
import { ProductService } from '@core/services/ProductService';

Rõ ràng và sạch sẽ hơn, đúng không?

🔧 Cách Thiết Lập Path Aliases Trong TypeScript

Để định nghĩa path aliases, bạn cần chỉnh sửa tệp tsconfig.json của mình.

Copy
{
  "compilerOptions": {
    "baseUrl": "./src",
    "paths": {
      "@components/*": ["components/*"],
      "@utils/*": ["utils/*"],
      "@core/*": ["core/*"]
    }
  }
}

Phân Tích:

  • baseUrl: Thư mục gốc cho tất cả các import của bạn (thường là src)
  • paths: Một đối tượng trong đó các khóa là alias và các giá trị là các đường dẫn thực tế tương đối với baseUrl

Hãy chắc chắn rằng công cụ của bạn (Webpack, Jest, v.v.) cũng hiểu các alias này. Điều này nằm ngoài phạm vi của bài viết này, nhưng rất đáng lưu ý.

🤖 Gặp Gỡ ts-path-alias-fixer: Bot Tái Cấu Trúc Nhập Khẩu Của Bạn

Việc tái cấu trúc tất cả các import ../../../ một cách thủ công? Không cần đâu.

ts-path-alias-fixer là một công cụ CLI quét dự án của bạn và thay thế các import tương đối bằng các alias mà bạn đã cấu hình — chỉ trong vài giây.

✅ Lợi Ích Chính:

  • Không cần làm việc thủ công
  • Xem trước các thay đổi bằng tùy chọn --dry-run mà không làm thay đổi tệp
  • Nhanh chóng và an toàn
  • Hoạt động đệ quy qua các thư mục

⚙️ Cài Đặt và Sử Dụng ts-path-alias-fixer

Bước 1: Cài Đặt Gói

  • Cài đặt toàn cục:
Copy
npm install -g ts-path-alias-fixer
  • Cài đặt cục bộ (khuyến nghị):

Cài đặt như một phụ thuộc phát triển trong dự án của bạn:

  • với npm:
Copy
npm install --save-dev ts-path-alias-fixer
  • hoặc với Yarn:
Copy
yarn add --dev ts-path-alias-fixer

Bước 2: Định Nghĩa Path Aliases Trong tsconfig.json

Đảm bảo rằng tệp tsconfig.json của bạn bao gồm baseUrlpaths, như đã thấy trước đó.

Ví dụ:

Copy
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"],
      "@components/*": ["src/lib/apiClient/components/*"],
      "@services/*": ["src/lib/apiClient/services/*"],
      "@utils/*": ["src/utils/*"]
    }
  }
}

Bước 3: Chạy Trình Sửa Lỗi

Từ thư mục gốc của dự án, chạy với hoặc không có các tùy chọn CLI bổ sung như mô tả dưới đây:

Copy
npx fix-ts-imports

Công cụ này sẽ quét tất cả các tệp .ts.tsx, phát hiện các import tương đối và thay thế chúng bằng các path aliases tương ứng dựa trên cài đặt tsconfig.json của bạn.

🛠️ Tùy Chọn CLI Bổ Sung

Một số tùy chọn hữu ích bạn có thể sử dụng:

  • --dir: Xác định thư mục gốc của dự án của bạn, ví dụ ./
  • --alias: Xác định alias để thay thế các đường dẫn tương đối, ví dụ @
  • --base: Đường dẫn thư mục gốc bên trong dự án để thay thế, ví dụ src
  • --dry-run: Xem trước các thay đổi mà không thay đổi tệp

Ví Dụ:

Nếu bạn chỉ muốn thay đổi tất cả các tệp với các import tương đối là ../.. thành alias tùy chỉnh với thư mục gốc như @/

Để chuyển đổi dòng import sau:

Copy
import { ProductService } from '../../../../core/services/ProductService';

Thành:

Copy
import { ProductService } from '@/core/services/ProductService';

Bạn có thể làm như sau:

Copy
npx fix-ts-imports

Hoặc với các tham số tùy chọn như sau:

Copy
npx fix-ts-imports --dir ./ --alias @ --base src

Lưu ý: Ở đây src là đường dẫn thư mục được chỉ định dưới dạng --base cho alias được sử dụng mà đã được định nghĩa trong tsconfig.json như trong ví dụ cho @/*

Copy
{
...
"baseUrl": ".",
    "paths": {
      "@/*": ["src/*"],
      }
...
}

🧪 Ví Dụ Trước & Sau

Ví dụ tệp tsconfig.json trong dự án của bạn:

Copy
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"],
      "@components/*": ["src/lib/apiClient/components/*"],
      "@services/*": ["src/lib/apiClient/services/*"],
      "@utils/*": ["src/utils/*"]
    },
  }
}

Muốn sửa đổi tất cả các import đường dẫn tương đối như ../.. trong thư mục dự án của bạn thành một alias đường dẫn tùy chỉnh chung như @/

Trước:

Copy
import { ApiService } from '../../../services/ApiService';

Sau khi chạy ts-path-alias-fixer:
Chạy lệnh dưới đây từ dòng lệnh của bạn:

Copy
npx fix-ts-imports --dir ./ --alias @ --base src

Và các tệp của bạn sẽ được chuyển đổi thành:

Copy
import { ApiService } from '@/services/ApiService';

Muốn sửa đổi tất cả các tệp trong dự án với tất cả các import đường dẫn tương đối liên quan đến dịch vụ như ../../src/lib/apiClient/services/service-1 trong thư mục dự án của bạn thành một alias đường dẫn thư mục tùy chỉnh như @services/

Trước:

Copy
import { ApiService } from '../../../../services/ApiService';

Sau khi chạy ts-path-alias-fixer:
Chạy lệnh dưới đây từ dòng lệnh của bạn:

Copy
npx fix-ts-imports --dir ./ --alias @services --base src/lib/apiClient/services

Và các tệp của bạn sẽ được chuyển đổi thành:

Copy
import { ApiService } from '@services/ApiService';

Muốn sửa đổi lại, với tất cả các tệp trong dự án với tất cả các import đường dẫn tương đối liên quan đến thành phần như ../../src/lib/apiClient/components/component-1 trong thư mục dự án của bạn thành một alias đường dẫn thư mục tùy chỉnh như @components/

Trước:

Copy
import { Button} from '../../../../components/buttonComponent';

Sau khi chạy ts-path-alias-fixer:
Chạy lệnh dưới đây từ dòng lệnh của bạn:

Copy
npx fix-ts-imports --dir ./ --alias @components --base src/lib/apiClient/components

Và các tệp của bạn sẽ được chuyển đổi thành:

Copy
import { Button} from '@components/buttonComponent';

Sử dụng công cụ này nhiều lần bạn muốn và trong vài phút tận hưởng mã nguồn sạch hơn và dễ đọc hơn.

Chạy Với Tùy Chọn Dry-Run:

Trong dự án của bạn, trước khi thay đổi các tệp hiện có của bạn bằng công cụ này, nếu bạn muốn kiểm tra và hiểu những tệp nào sẽ bị ảnh hưởng

Xem Trước Các Thay Đổi Mà Không Thay Đổi Tệp:

Copy
npx fix-ts-imports --dry-run

Chạy Với Tùy Chọn Tùy Chỉnh:

Copy
npx fix-ts-imports --dir ./src --alias @ --base src --dry-run

Ví Dụ Đầu Ra
Khi bạn chạy lệnh CLI như trên với dry-run, bạn sẽ thấy các nhật ký console cho biết có bao nhiêu tệp sẽ được sửa đổi, cùng với đường dẫn tệp của chúng, như sau:

Copy
🔍 Dry run: 3 file(s) would be modified.
 - src\index.ts
 - src\utils\helper.ts
 - src\api\v1\index.ts

Sau khi bạn hài lòng với đầu ra của tùy chọn --dry-run, hãy chạy lệnh CLI mà không có tùy chọn --dry-run để sửa đổi các tệp.

🛡️ Mẹo & Thực Tiễn Tốt Nhất

  • Luôn cam kết mã của bạn trước khi chạy công cụ — chỉ trong trường hợp
  • Sử dụng tùy chọn --dry-run để xem trước các thay đổi
  • Thêm path aliases sớm trong một dự án để tránh các lần tái cấu trúc trong tương lai
  • Kết hợp với các quy tắc ESLint để đảm bảo việc sử dụng alias trong nhóm

🚀 Kết Luận

Sử dụng TypeScript Path Aliases giúp mã của bạn sạch hơn, dễ bảo trì và mở rộng hơn. Với sức mạnh của ts-path-alias-fixer, bạn có thể tự động hóa quá trình chuyển đổi và tập trung vào việc viết mã thay vì đếm ../../.

Vậy hãy tiếp tục — cài đặt nó, alias các đường dẫn của bạn, và cảm ơn bản thân sau này. 🧠

💬 Có Câu Hỏi Hoặc Mẹo?

Hãy để lại chúng trong phần bình luận! Và nếu điều này hữu ích với bạn, hãy xem xét chia sẻ nó với nhóm của bạn hoặc cho repo một ⭐️ trên GitHub.

Liên kết nội dung gốc

Chúc bạn lập trình vui vẻ! 👨‍💻👩‍💻

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào