Vendoring #
Vendoring dalam konteks pengembangan perangkat lunak, termasuk TypeScript, merujuk pada praktik menyertakan dependensi pihak ketiga ke dalam proyek Anda secara langsung, daripada mengandalkan manajer paket eksternal seperti npm atau Yarn untuk mengelolanya. Dalam praktik ini, Anda menyalin kode sumber dari pustaka atau modul yang diperlukan ke dalam repositori proyek Anda sendiri.
Mengapa Melakukan Vendoring? #
Vendoring sering digunakan dalam skenario berikut:
-
Stabilitas: Dengan melakukan vendoring, Anda memiliki kontrol penuh atas versi pustaka yang digunakan, sehingga dapat mencegah masalah yang mungkin timbul dari perubahan atau pembaruan pustaka eksternal.
-
Ketergantungan Jangka Panjang: Jika sebuah pustaka tidak lagi dipelihara atau dikembangkan oleh komunitas, Anda dapat tetap menggunakan versi yang di-vendor dan menyesuaikannya sendiri jika diperlukan.
-
Kustomisasi: Anda mungkin perlu menyesuaikan pustaka tertentu untuk memenuhi kebutuhan proyek Anda. Dengan vendoring, Anda dapat dengan mudah mengedit kode sumber pustaka tersebut tanpa harus menunggu perubahan diterima oleh pengelola pustaka asli.
-
Keamanan: Dalam beberapa kasus, dependensi eksternal dapat menimbulkan risiko keamanan. Dengan vendoring, Anda bisa memeriksa dan memverifikasi kode sumber yang Anda gunakan, mengurangi risiko yang terkait dengan paket eksternal yang mungkin memiliki kerentanan.
Bagaimana Vendoring Dilakukan dalam TypeScript? #
Vendoring dalam TypeScript melibatkan beberapa langkah sederhana:
-
Menyalin Kode Sumber:
- Anda menyalin kode sumber dari pustaka pihak ketiga langsung ke dalam direktori proyek Anda, biasanya di dalam folder seperti
vendor/
atauthird_party/
.
Contoh Struktur Proyek:
my-project/ ├── src/ │ ├── index.ts │ └── ... ├── vendor/ │ ├── some-library/ │ │ ├── index.ts │ │ └── ... └── tsconfig.json
- Anda menyalin kode sumber dari pustaka pihak ketiga langsung ke dalam direktori proyek Anda, biasanya di dalam folder seperti
-
Mengonfigurasi TypeScript:
- Anda perlu memastikan bahwa TypeScript mengetahui di mana letak file yang di-vendor. Anda bisa mengaturnya melalui
tsconfig.json
.
Contoh
tsconfig.json
:{ "compilerOptions": { "baseUrl": "./", "paths": { "*": ["src/*", "vendor/*"] } } }
Dengan konfigurasi ini, TypeScript akan mencari modul yang diimpor di dalam direktori
src/
danvendor/
. - Anda perlu memastikan bahwa TypeScript mengetahui di mana letak file yang di-vendor. Anda bisa mengaturnya melalui
-
Mengimpor Pustaka yang Di-vendor:
- Setelah kode sumber di-vendor, Anda dapat mengimpornya ke dalam kode TypeScript Anda seperti modul lain.
Contoh:
import { someFunction } from "some-library"; someFunction();
Dalam contoh ini,
some-library
diimpor dari direktorivendor/some-library
. -
Menangani Type Definitions:
- Jika pustaka yang di-vendor adalah JavaScript tanpa tipe TypeScript, Anda mungkin perlu menulis atau menyalin file definisi tipe (
.d.ts
) agar TypeScript dapat memahami tipe yang digunakan oleh pustaka tersebut.
Contoh:
// vendor/some-library/index.d.ts declare module "some-library" { export function someFunction(): void; }
- Jika pustaka yang di-vendor adalah JavaScript tanpa tipe TypeScript, Anda mungkin perlu menulis atau menyalin file definisi tipe (
Kelebihan dan Kekurangan Vendoring #
Kelebihan:
- Kontrol penuh atas dependensi dan versi pustaka.
- Stabilitas dan keamanan yang lebih baik.
- Kustomisasi pustaka sesuai kebutuhan proyek.
Kekurangan:
- Ukuran repositori menjadi lebih besar karena menyertakan kode pustaka pihak ketiga.
- Pemeliharaan tambahan diperlukan jika pustaka yang di-vendor diperbarui atau memerlukan penyesuaian.
Kesimpulan #
Vendoring dalam TypeScript adalah strategi yang memberikan kontrol lebih besar atas dependensi proyek Anda dengan menyertakan kode pustaka pihak ketiga secara langsung dalam repositori proyek. Meskipun ini meningkatkan stabilitas dan keamanan, vendoring juga menambah beban pemeliharaan dan meningkatkan ukuran proyek. Oleh karena itu, keputusan untuk melakukan vendoring harus mempertimbangkan kebutuhan spesifik proyek Anda dan tim pengembangan Anda.