Masukkan Password
20 Menyertakan & Mengecualikan File
Lecture ini melanjutkan pembahasan tsconfig.json. Kalau lecture sebelumnya kita baru mengenal bahwa tsconfig.json adalah file konfigurasi TypeScript project, sekarang kita mulai melihat bagaimana menentukan file mana yang boleh dan tidak boleh di-compile.
Ada 3 properti utama yang dibahas:
excludeincludefiles
Kunci untuk memahami lecture ini sebenarnya sederhana:
include= file mana yang ingin kita compileexclude= file mana yang tidak ingin kita compilefiles= file tertentu yang ingin kita compile secara eksplisit
Mari kita bahas satu per satu.
1. Ingat kembali tsconfig.json
Sebelumnya kita menjalankan:
tsc --init
dan TypeScript membuat:
tsconfig.json
File ini menjadi semacam pusat pengaturan TypeScript project.
Misalnya:
project/
β
βββ app.ts
βββ config.ts
βββ user.ts
βββ test.ts
βββ tsconfig.json
Ketika kita menjalankan:
tsc
TypeScript akan melihat:
tsconfig.json
lalu menentukan bagaimana project tersebut harus di-compile.
Salah satu hal yang perlu ditentukan adalah:
“File mana saja yang harus di-compile?”
Nah, untuk itu kita punya include, exclude, dan files.
2. exclude β menentukan file yang TIDAK ingin di-compile
Misalnya project kita punya:
project/
β
βββ app.ts
βββ config.ts
βββ test.ts
Secara default, TypeScript bisa menemukan file-file TypeScript yang termasuk dalam project.
Tapi misalnya kita mengatakan:
“Saya ingin compile
app.tsdanconfig.ts, tapi jangan compiletest.ts.”
Kita bisa menggunakan:
{
"compilerOptions": {},
"exclude": [
"test.ts"
]
}
Artinya:
Jangan masukkan
test.tske dalam proses compilation.
3. Apa yang terjadi tanpa exclude?
Misalnya:
app.ts
config.ts
test.ts
Kemudian:
tsc
Hasilnya bisa menjadi:
app.ts β app.js
config.ts β config.js
test.ts β test.js
Karena semuanya termasuk dalam project.
4. Setelah menggunakan exclude
Kita tulis:
{
"exclude": [
"test.ts"
]
}
Kemudian:
tsc
Hasilnya:
app.ts β app.js
config.ts β config.js
test.ts β β tidak di-compile
Jadi:
exclude
β
"Jangan compile file ini"
5. Kenapa kita membutuhkan exclude?
Dalam project nyata, kita bisa memiliki berbagai macam file.
Misalnya:
src/
βββ app.ts
βββ user.ts
βββ product.ts
βββ test.ts
Kita mungkin ingin:
app.ts
user.ts
product.ts
masuk production.
Tetapi:
test.ts
hanya digunakan untuk testing.
Jadi kita bisa mengecualikannya.
Contoh:
{
"exclude": [
"src/test.ts"
]
}
6. exclude menggunakan relative path
Misalnya struktur project:
project/
β
βββ app.ts
β
βββ src/
βββ user.ts
βββ test.ts
Kalau ingin mengecualikan test.ts, kita bisa menulis:
{
"exclude": [
"src/test.ts"
]
}
Perhatikan bahwa path-nya relatif terhadap project/configuration file.
7. exclude bisa menggunakan wildcard
Sekarang misalnya project kita memiliki:
app.ts
user.ts
test.dev.ts
config.dev.ts
product.ts
Kita ingin mengatakan:
“Semua file yang namanya berakhir dengan
.dev.tsjangan di-compile.”
Kita bisa menggunakan wildcard:
{
"exclude": [
"*.dev.ts"
]
}
Tanda:
*
disebut wildcard.
Secara sederhana, * berarti:
“Apa pun.”
Jadi:
*.dev.ts
bisa cocok dengan:
test.dev.ts
config.dev.ts
user.dev.ts
8. Wildcard dengan folder
Misalnya kita memiliki:
src/
βββ app.ts
βββ test.dev.ts
βββ config.ts
utils/
βββ helper.ts
βββ test.dev.ts
Kita bisa menggunakan pola seperti:
{
"exclude": [
"**/*.dev.ts"
]
}
Artinya kurang lebih:
Cari file
.dev.tsdi folder-folder project dan jangan compile.
Untuk tahap ini, yang penting kamu memahami konsep wildcard:
* β wildcard
yang digunakan untuk mencocokkan banyak nama file.
9. node_modules dan exclude
Lecture juga membahas folder:
node_modules
Kalau kamu pernah menggunakan Node.js, React, Angular, atau project JavaScript/TypeScript lainnya, kamu akan sering melihat folder ini.
Misalnya:
project/
β
βββ node_modules/
βββ src/
βββ package.json
βββ tsconfig.json
10. Apa itu node_modules?
Secara sederhana:
node_modulesmenyimpan package/dependency yang digunakan oleh project.
Misalnya project kita membutuhkan library tertentu.
Library tersebut dan dependency-nya bisa berada di:
node_modules/
Isinya bisa sangat banyak.
Contohnya secara konsep:
node_modules/
βββ package-a/
βββ package-b/
βββ package-c/
βββ package-d/
βββ ...
Kita biasanya tidak ingin TypeScript menganggap source code dependency tersebut sebagai source code utama project kita untuk di-compile.
11. Mengapa node_modules biasanya tidak perlu kita compile?
Bayangkan project kita hanya memiliki:
src/
βββ app.ts
βββ user.ts
βββ product.ts
Tapi node_modules mungkin memiliki ribuan file dari berbagai dependency.
Kita tidak ingin:
project kita
+
semua source dependency
β
compile semuanya
Kita hanya ingin:
source code project
β
TypeScript Compiler
β
JavaScript
12. Catatan penting tentang node_modules
Ada detail penting dari lecture:
Secara default, node_modules memang dikecualikan dalam perilaku TypeScript project tertentu.
Jadi kita biasanya tidak perlu menulis:
{
"exclude": [
"node_modules"
]
}
jika kita tidak menggunakan konfigurasi exclude sendiri.
Tetapi ketika kita menambahkan exclude secara eksplisit, lecture mengingatkan bahwa kita perlu berhati-hati terhadap perilaku default tersebut dan dapat mencantumkan node_modules secara eksplisit jika memang ingin memastikan folder itu dikecualikan.
Contohnya:
{
"exclude": [
"node_modules",
"test.ts"
]
}
Jadi untuk pembelajaran lecture ini, ingat:
Kalau kita membuat aturan
exclude, kita bisa secara eksplisit memasukkannode_modulesjika ingin memastikan folder tersebut dikecualikan.
13. Sekarang kebalikannya: include
Kalau:
exclude = jangan compile
maka:
include = compile
include digunakan untuk menentukan file/folder mana yang ingin dimasukkan ke project compilation.
Misalnya:
app.ts
config.ts
user.ts
Kita hanya ingin:
app.ts
config.ts
Maka:
{
"include": [
"app.ts",
"config.ts"
]
}
Artinya:
Hanya file yang termasuk dalam aturan
includeyang diproses.
14. Contoh include
Misalnya:
project/
β
βββ app.ts
βββ config.ts
βββ user.ts
βββ test.ts
Kita menulis:
{
"include": [
"app.ts",
"config.ts"
]
}
Kemudian:
tsc
Maka:
app.ts β β
compile
config.ts β β
compile
user.ts β β tidak
test.ts β β tidak
15. include bisa menggunakan folder
Ini salah satu kelebihan include.
Misalnya project kita:
project/
β
βββ src/
β βββ app.ts
β βββ user.ts
β βββ product.ts
β βββ config.ts
β
βββ test/
βββ test.ts
Kita ingin compile semua TypeScript di dalam src.
Kita bisa menulis:
{
"include": [
"src"
]
}
Tidak perlu menulis:
{
"include": [
"src/app.ts",
"src/user.ts",
"src/product.ts",
"src/config.ts"
]
}
Ini sangat berguna untuk project besar.
16. Kenapa include cocok untuk project besar?
Bayangkan ada:
src/
βββ app.ts
βββ user.ts
βββ product.ts
βββ config.ts
βββ helper.ts
βββ service.ts
βββ validation.ts
βββ ...
Bisa saja ada 100 file.
Kita tidak mau menulis semuanya:
{
"include": [
"src/app.ts",
"src/user.ts",
"src/product.ts",
"...",
"src/file100.ts"
]
}
Cukup:
{
"include": [
"src"
]
}
Artinya:
“Compile file-file yang termasuk di dalam
src.”
17. include + exclude
Nah, sekarang kita bisa menggabungkan keduanya.
Misalnya:
src/
βββ app.ts
βββ user.ts
βββ product.ts
βββ test.ts
Kita ingin:
Compile semua file di
src, kecualitest.ts.
Maka:
{
"include": [
"src"
],
"exclude": [
"src/test.ts"
]
}
Flow-nya:
src/
β
βββββββββββΌββββββββββ
β β β
app.ts user.ts test.ts
β β β
β
β
β
compile compile exclude
Ini pola yang sangat berguna.
18. Sekarang files
Selain include dan exclude, kita punya:
{
"files": [
"app.ts",
"config.ts"
]
}
files digunakan untuk menentukan file tertentu secara eksplisit yang ingin dimasukkan ke compilation.
19. Perbedaan files dan include
Ini bagian yang penting.
files
Kamu menentukan:
“Compile file-file ini.”
Contoh:
{
"files": [
"app.ts",
"config.ts"
]
}
Hanya file yang ditulis di sana.
include
Kamu bisa menentukan:
“Compile file-file yang sesuai dengan pola/folder ini.”
Contoh:
{
"include": [
"src"
]
}
Semua file yang sesuai di dalam src dapat dimasukkan.
20. Perbedaan paling sederhana
Bayangkan kamu punya rak buku.
files
Kamu berkata:
“Saya mau buku A, B, dan C.”
files
β
A
B
C
Harus menyebutkan satu per satu.
include
Kamu berkata:
“Saya mau semua buku dari rak Programming.”
include
β
Programming/
β
semua file yang sesuai
Tidak perlu menyebutkan satu per satu.
21. Kenapa files lebih cocok untuk project kecil?
Misalnya hanya ada:
app.ts
config.ts
Kita bisa:
{
"files": [
"app.ts",
"config.ts"
]
}
Simple.
Tapi kalau ada:
src/
βββ app.ts
βββ user.ts
βββ product.ts
βββ config.ts
βββ service.ts
βββ helper.ts
...
lebih praktis:
{
"include": [
"src"
]
}
Daripada menulis semua file satu per satu.
22. files tidak bisa digunakan untuk folder seperti include
Ini salah satu perbedaan penting dari lecture.
Misalnya:
{
"files": [
"src"
]
}
Ini bukan cara yang tepat untuk mengatakan:
“Compile semua file di src.”
Karena files ditujukan untuk path file tertentu, bukan directory selection seperti include.
Untuk folder, gunakan:
{
"include": [
"src"
]
}
23. Perbandingan ketiganya
Sekarang kita gabungkan:
| Property | Fungsi |
|---|---|
include | Menentukan file/folder yang ingin dimasukkan |
exclude | Mengecualikan file/folder dari compilation |
files | Menentukan file tertentu secara eksplisit |
Cara mengingat:
include β "MASUKKAN INI"
exclude β "JANGAN MASUKKAN INI"
files β "INI SAJA, FILE INI SECARA SPESIFIK"
24. Contoh lengkap
Misalnya project:
project/
β
βββ src/
β βββ app.ts
β βββ user.ts
β βββ product.ts
β βββ test.ts
β
βββ config.ts
βββ tsconfig.json
Kita ingin:
- compile semua yang ada di
src - tetapi jangan compile
src/test.ts
Kita bisa:
{
"include": [
"src"
],
"exclude": [
"src/test.ts"
]
}
Hasil:
src/app.ts β β
src/user.ts β β
src/product.ts β β
src/test.ts β β
config.ts β β
25. exclude bukan berarti file tersebut “tidak boleh ada”
Ini juga perlu dipahami.
Kalau kita menulis:
{
"exclude": [
"src/test.ts"
]
}
bukan berarti:
test.tsdihapus.
Bukan juga:
test.tstidak boleh digunakan.
Maksudnya hanya:
test.tstidak dimasukkan dalam file yang diproses oleh TypeScript project berdasarkan konfigurasi tersebut.
File-nya tetap ada:
src/
βββ app.ts
βββ user.ts
βββ test.ts β masih ada
Hanya saja compiler tidak memasukkannya sesuai aturan project.
26. Jangan salah memahami include
include juga bukan berarti:
“Buat file baru.”
Misalnya:
{
"include": [
"src"
]
}
Tidak membuat folder src.
Tidak membuat file apa pun.
Itu hanya memberitahu compiler:
“File yang sesuai dengan pattern ini adalah bagian dari project yang perlu diproses.”
27. Bagaimana dengan Watch Mode?
Ini nyambung langsung dengan lecture sebelumnya.
Kita sebelumnya belajar:
tsc --watch
Kalau sekarang kita memiliki:
{
"include": [
"src"
],
"exclude": [
"src/test.ts"
]
}
dan menjalankan:
tsc --watch
maka TypeScript akan mengawasi project berdasarkan konfigurasi tersebut.
Secara konsep:
tsconfig.json
β
include / exclude
β
menentukan file project
β
tsc --watch
β
monitor perubahan
β
compile otomatis
28. Gambaran besar tsconfig.json
Untuk sekarang, bayangkan tsconfig.json mempunyai dua kelompok pengaturan:
tsconfig.json
β
βββ compilerOptions
β β
β bagaimana compiler bekerja
β
βββ include
β β
β file mana yang masuk
β
βββ exclude
β β
β file mana yang dikeluarkan
β
βββ files
β
file tertentu yang dimasukkan
Ini penting karena nanti tsconfig.json akan semakin banyak isinya.
29. Bedakan compilerOptions dengan include/exclude/files
Lecture juga menyinggung hal ini.
compilerOptions
Mengatur perilaku compiler.
Contohnya nanti:
{
"compilerOptions": {
"target": "...",
"module": "...",
"strict": true
}
}
Pertanyaannya:
“Bagaimana TypeScript harus melakukan compilation?”
include, exclude, files
Mengatur file apa yang menjadi bagian dari compilation.
Pertanyaannya:
“File mana yang harus diproses?”
Jadi:
compilerOptions
β HOW?
β Bagaimana compile?
include/exclude/files
β WHAT?
β File apa yang di-compile?
Ini cara yang bagus untuk mengingatnya.
30. Contoh mental model
Bayangkan kamu punya guru yang memeriksa tugas.
include
Kamu berkata:
“Pak, periksa semua tugas di folder
src.”
include β src/
exclude
Kemudian:
“Tapi jangan periksa
test.ts.”
exclude β src/test.ts
files
Atau kamu bisa berkata:
“Pak, periksa hanya tugas
app.tsdanconfig.ts.”
files β app.ts, config.ts
compilerOptions
Kemudian kamu memberikan instruksi:
“Dan gunakan aturan penilaian tertentu.”
compilerOptions
31. Mana yang biasanya digunakan?
Untuk project sederhana:
files
bisa cukup.
Untuk project yang lebih besar:
include
biasanya jauh lebih nyaman karena kita bisa menggunakan folder/pattern.
Dan:
exclude
berguna ketika ada bagian tertentu yang tidak ingin kita masukkan.
Pola yang sering kamu temui secara konsep adalah:
{
"include": [
"src"
],
"exclude": [
"src/test.ts"
]
}
Artinya:
“Ambil source code dari
src, tapi jangan ikutkantest.ts.”
32. Ringkasan visual
tsconfig.json
β
ββββββββββββββββΌβββββββββββββββ
β β β
include exclude files
β β β
β β β
"MASUKKAN" "JANGAN MASUKKAN" "FILE INI"
β β β
β β β
folder file/pattern file tertentu
π§ Cheat Sheet
Kalau kamu ingin mengingat lecture ini dengan cepat:
include
{
"include": ["src"]
}
Artinya:
Compile file yang sesuai di dalam
src.
exclude
{
"exclude": ["src/test.ts"]
}
Artinya:
Jangan compile
src/test.ts.
Bisa juga menggunakan wildcard:
{
"exclude": ["*.dev.ts"]
}
files
{
"files": [
"app.ts",
"config.ts"
]
}
Artinya:
Masukkan file-file tersebut secara eksplisit.
π― Cara paling mudah mengingat
Bayangkan ada pintu masuk ke TypeScript Compiler:
TypeScript Compiler
β
β
ββββββ΄βββββ
β β
INCLUDE EXCLUDE
β β
"MASUK" "JANGAN MASUK"
Sedangkan files seperti kamu menunjuk langsung:
files
β
"Compile file A"
"Compile file B"
"Compile file C"
Jadi inti lecture ini adalah:
includemenentukan apa yang ingin kita masukkan ke compilation,excludemenentukan apa yang ingin kita keluarkan, danfilesmemungkinkan kita menentukan file-file tertentu secara eksplisit.
Dan satu koneksi penting dengan lecture sebelumnya:
tsconfig.json
β
menentukan file + aturan compiler
β
tsc
atau
tsc --watch
β
JavaScript
Jadi mulai dari sini, tsconfig.json akan menjadi pusat pengaturan project TypeScript kita, bukan lagi sekadar menjalankan tsc dengan nama file secara manual.