TypeScript: Node.js ile Path Alias Kullanımı

Path Alias, module-alias

Codebase büyüdüğünde ve kod yapısı derinleştiğinde .ts dosyalarında yaptığımız import’ların relative path’leri uzamaya başlar.

import { MicrosoftRightAdapter } from "../../../../../adapters/right/infrastructure/api/microsoft/right.adapter.microsoft";

Bu durum kod okunabilirliğini zorlaştırmanın yanında kodu dosya sistemi yapısına bağlı hale getirir. Ayrıca relative path’ler dosya sistemi üzerinden arama yapılmasına sebep olduğu için büyük code base’lerde performans sorunu yaratabilir.

Relative path yerine path alias kullandığımızda import’umuz aşağıdaki şekilde olacaktır.

import { MicrosoftRightAdapter } from "@/adapters/right/infrastructure/api/microsoft/right.adapter.microsoft";

Hem typescript’te hem de /dist klasöründe bulunan compile edilmiş js dosyalarındaki @ ile başlayan path’lerin çözümlenebilmesi için ufak bir iki işlem yapmamız yeterli olacak.

Öncelikle typescipt’teki çözümleme için tsconfig’imize aşağıdaki satırları ekliyoruz. baseUrl’imizi proje ana klasörü olarak tanımlayıp @ ile başlayan pathlerin src içerisinde aranacak şekilde çözümlenmesini sağlıyoruz.

// tsconfig.json
{
  "compilerOptions": {
    ...
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  },
    ...
}

Sonrasında /dist klasörü altındaki compile edilmiş js dosyarındaki @ ile başlayan pathlerin çözümlenebilmesini sağlayacak olan module-alias paketini kuruyoruz.

npm i --save module-alias

Bu paket için alias kuralı tanımlıyoruz. @ ile başlayan javascript modül pathlerinin dist klasörü üzerinden çözümlenmesi gerektiğini belirtiyoruz.

// package.json
{
  ...
  "_moduleAliases": {
      "@": "dist"
  },
  ....
}

Son olarak src içerindeki ana index.ts’mizin içerisine bu paketi import ediyoruz.

// src/index.ts
import "module-alias/register";
...

Ve birkaç ufak işlemle kodumuzu daha temiz ve okunabilir hale getirmiş olduk.