‫Jonas: Sebagai bagian terakhir di bagian ini, mari
‫kita bicara tentang bagaimana NODE. Modul JS benar-benar bekerja di
‫belakang layar.
‫Pertama-tama di NODE. Sistem modul
‫JS setiap file JavaScript diperlakukan sebagai modul terpisah.
‫Dan kami sudah bermain-main sedikit dengan
‫modul di persimpangan,
‫'khususnya dengan menggunakan fungsi yang
‫dibutuhkan dan mengekspor data dari modul.
‫Jadi itulah dasar-dasar modul Common JS yang merupakan
‫sistem modul yang digunakan node.
‫Karena itu bekerja dengan sangat baik di server.
‫Sekarang, ada juga skrip ECMA asli atau sistem
‫modul ES yang
‫mungkin sudah Anda kenal, 'khususnya jika
‫Anda mengambil kursus JavaScript saya, atau
‫jika Anda telah menulis JavaScript
‫di bagian depan akhir-akhir ini.
‫Sistem modul ES yang saya bicarakan ini
‫dikembangkan untuk bekerja di browser menggunakan sintaks ekspor impor.
‫Jadi, saya hanya ingin memperjelas bahwa ini
‫adalah dua sistem modul berbeda yang akan
‫Anda lihat
‫dalam situasi berbeda, jadi jangan bingung.
‫Ada juga upaya untuk mengimplementasikan modul ES
‫asli di NODE. JS, 'khusus menggunakan
‫ekstensi file seperti
‫. mjs.
‫Namun sejauh ini, itu tidak
‫benar-benar menjadi hal yang populer untuk digunakan.
‫Jadi, kecuali Anda menonton kursus
‫ini di masa
‫mendatang, Anda mungkin akan selalu
‫menggunakan sistem Common JS dengan node.js.
‫Sekarang, Anda mungkin bertanya-tanya mengapa di NODE. JS masing-masing
‫dan setiap modul benar-benar mendapatkan akses
‫ke fungsi yang diperlukan untuk
‫mengimpor modul di tempat pertama.
‫Benar?
‫Maksud saya, ini bukan fungsi JavaScript standar.
‫Jadi dari mana asalnya?
‫Dan bagaimana tepatnya cara kerjanya di belakang layar?
‫Nah, mari kita cari tahu.
‫Jadi pertanyaannya di
‫sini adalah, apa yang terjadi
‫setiap kali kita membutuhkan modul dengan
‫memanggil fungsi require dengan nama modul, adalah argumennya.
‫Sebagai gambaran yang
‫sangat luas, langkah-langkah berikut dijalankan di belakang layar.
‫Pertama, jalur ke modul
‫yang diperlukan diselesaikan dan file dimuat.
‫Kemudian proses yang disebut pembungkus
‫terjadi
‫setelah itu, kode modul
‫dijalankan dan ekspor modul dikembalikan.
‫Dan akhirnya seluruh modul di-cache.
‫Jadi sekarang mari kita lihat setiap langkah secara lebih rinci.
‫Pertama, bagaimana node mengetahui file mana yang akan
‫dimuat saat kita membutuhkan modul?
‫Karena ingat, kita sebenarnya dapat
‫memuat tiga jenis modul yang berbeda.
‫Modul inti Node, modul
‫kita sendiri atau modul pihak ketiga dari npm like express
‫yang merupakan kerangka kerja node yang akan
‫kita gunakan di sebagian besar kursus.
‫Jadi proses ini dikenal sebagai menyelesaikan jalur file.
‫Dan inilah cara kerjanya.
‫Ketika fungsi yang membutuhkan menerima nama modul
‫sebagai inputnya, pertama-tama
‫ia akan mencoba memuat modul inti dengan nama itu.
‫Seperti misalnya modul http.
‫Ini akan secara otomatis menemukan jalur ke modul
‫itu dan kemudian memuatnya.
‫Sekarang jika jalur dimulai dengan satu
‫titik, atau dua
‫titik, itu berarti itu adalah modul pengembang.
‫Karena kami menunjukkan jalur relatif ke file kami.
‫Jadi node akan mencoba memuat file
‫itu, tetapi jika tidak ada file dengan nama
‫itu, maka node akan mencari
‫folder dan memuat index. js jika ada di folder itu.
‫Jadi dalam contoh
‫ini, ia akan mencoba memuat lib/controller. js.
‫Ingat bahwa kita dapat menghapus titik
‫js saat membutuhkan modul.
‫Jika tidak ada file di jalur
‫ini, ia
‫akan mencoba membuka index. js dari folder lib/controller sebagai gantinya.
‫Masuk akal?
‫Dan akhirnya, jika modul yang
‫diperlukan bukan
‫modul inti, atau modul
‫pengembang, node akan menganggapnya sebagai modul dari npm.
‫Dan ingat, pada modul yang kita muat dari npm, sebenarnya
‫kita tidak perlu menulis path saat kita membutuhkannya.
‫Hanya nama
‫modul, cara kerjanya pada modul inti.
‫Jadi modul pihak ketiga ini disimpan
‫dalam folder modul node,
‫jadi node akan masuk ke folder itu dan mencoba
‫mencari modul di sana dan kemudian memuatnya.
‫Dan tentu saja, jika file tidak dapat ditemukan
‫di mana pun, maka akan terjadi kesalahan
‫dan eksekusi aplikasi dihentikan.
‫Selanjutnya, setelah modul dimuat,
‫kode modul dibungkus menjadi fungsi khusus yang
‫akan memberi kita akses ke beberapa objek khusus.
‫Jadi langkah ini adalah tempat keajaiban terjadi.
‫Di sinilah kita mendapatkan jawaban atas pertanyaan itu, dari
‫mana sebenarnya fungsi yang dibutuhkan itu berasal dan mengapa
‫kita memiliki akses ke sana?
‫Itu karena nodejs menjalankan waktu,
‫mengambil kode dari modul
‫kami dan meletakkannya di dalam ekspresi fungsi
‫yang segera dipanggil, atau IIFE yang dapat Anda lihat di sini.
‫Jadi node sebenarnya tidak
‫secara langsung mengeksekusi kode yang saya tulis ulang
‫ke dalam file, melainkan fungsi wrapper yang akan
‫berisi kode kita di tubuhnya.
‫Ini juga melewati para ahli yang membutuhkan
‫modul, nama file dan objek dir ke dalamnya.
‫Jadi itu sebabnya di setiap modul
‫kami secara otomatis memiliki
‫akses ke hal-hal seperti fungsi yang diperlukan.
‫Jadi ini pada dasarnya seperti
‫variabel global yang disuntikkan ke setiap modul.
‫Sekarang dengan melakukan ini, node mencapai dua hal yang sangat penting.
‫Pertama, tentu saja, memberikan pengembang akses ke
‫semua variabel yang baru saja kita
‫bicarakan, yang sangat membantu.
‫Kedua, itu membuat variabel tingkat atas yang kita
‫definisikan dalam modul kita tetap pribadi.
‫Jadi itu hanya dicakup untuk modul
‫saat ini alih-alih membocorkan semuanya ke objek global.
‫Jadi bayangkan sejenak,
‫bahwa kita mendeklarasikan variabel x di salah satu modul
‫kita dan kemudian menyertakan modul npm yang juga
‫menggunakan variabel bernama x.
‫Tanpa mekanisme ini,
‫variabel kita sendiri kemudian akan ditimpa
‫dan seluruh aplikasi tidak akan berfungsi.
‫Jadi setiap modul yang memiliki ruang lingkup
‫pribadi sangat penting dan dicapai melalui
‫trik cerdas untuk membungkus kode kita ke dalam
‫fungsi khusus ini.
‫Sekarang mari kita lihat sekilas setiap objek
‫yang didapat modul kita.
‫Pertama fungsi require, yang
‫sudah kita ketahui.
‫Lalu, ada objek modul, yang
‫hanya merupakan referensi ke modul saat ini
‫dan yang bagi kami
‫paling penting dalam hal mengekspor data.
‫Hal yang sama berlaku untuk objek ekspor
‫yang akan kita bahas sebentar lagi.
‫Akhirnya, ada nama file
‫variabel kenyamanan dan nama dir yang
‫hanya berisi path absolut ke
‫file modul
‫saat ini serta nama direktori saat ini.
‫Dan begitulah cara kerja langkah pembungkus memuat modul.
‫Selanjutnya, kode dalam modul, atau
‫lebih tepatnya,
‫dalam fungsi pembungkus modul,
‫benar-benar dieksekusi oleh NODE. waktu pengerjaan JS.
‫Jadi, tidak ada yang mewah di sini.
‫Sampai saat
‫ini, fungsi require telah dipanggil dengan nama
‫modul karena argumen
‫path ke file modul telah diselesaikan menjadi file yang
‫dimuat, semua kode telah dibungkus ke dalam
‫fungsi wrapper yang kemudian dieksekusi.
‫Sekarang, saatnya fungsi require
‫benar-benar mengembalikan sesuatu.
‫Dan apa yang dikembalikannya adalah ekspor modul yang diperlukan.
‫Ekspor ini disimpan dalam modul. objek ekspor.
‫Mungkin terlihat sedikit seperti ini.
‫Jadi, sekali lagi, di setiap modul kita dapat
‫mengekspor variabel, yang pada akhirnya akan dikembalikan oleh fungsi yang dibutuhkan.
‫Dan kami melakukannya dengan menetapkan variabel ke modul. ekspor atau hanya untuk mengekspor
‫di mana itu
‫hanya penunjuk ke modul. ekspor.
‫Kami akan melakukan ini dalam
‫praktik di video berikutnya, karena saya tahu ini terdengar
‫agak membingungkan ketika saya mengatakannya seperti ini.
‫Bagaimanapun, inilah yang perlu Anda
‫ketahui tentang kapan harus menggunakan module. ekspor atau hanya ekspor.
‫Jadi jika semua yang ingin Anda lakukan adalah mengekspor satu variabel
‫tunggal, seperti satu kelas atau satu fungsi,
‫Anda biasanya menggunakan modul. ekspor dan atur sama
‫dengan variabel yang ingin Anda ekspor.
‫Sama seperti dalam contoh ini.
‫Di
‫sisi lain, jika Anda ingin mengekspor beberapa
‫variabel bernama seperti beberapa fungsi,
‫misalnya, Anda
‫harus membuatnya sebagai properti dari objek ekspor.
‫Misalnya, jika kami membuat modul kalkulator, Anda dapat
‫membuat ekspor. tambah, ekspor.
‫memperbanyak, ekspor. membagi dan sebagainya dan sebagainya.
‫Masuk akal?
‫Sekali lagi, kita akan melakukan ini di video berikutnya dan itu
‫akan lebih masuk akal bagi Anda saat itu.
‫Ini secara efektif bagaimana kami mengekspor dan mengimpor data
‫dari satu modul ke modul lainnya.
‫Tentu saja, ini juga mengapa kami
‫biasanya menetapkan hasil dari fungsi yang dibutuhkan yang dipanggil ke variabel baru.
‫Sehingga kita bisa menghemat ekspor yang dikembalikan.
‫Sekarang, hanya untuk menyelesaikan video
‫ini dengan sangat cepat, langkah terakhir adalah modul
‫sebenarnya di-cache setelah pertama kali dimuat.
‫Artinya, jika Anda memerlukan modul yang sama
‫beberapa kali, Anda akan selalu mendapatkan hasil yang sama.
‫Dan kode dalam modul sebenarnya hanya dieksekusi pada
‫panggilan pertama.
‫Dalam panggilan
‫berikutnya, hasilnya hanya diambil dari cache.
‫Sempurna.
‫Jadi saya harap semua logika di
‫balik cara bekerja
‫dengan modul tidak lagi terlihat ajaib.
‫Sangat penting untuk mengetahui bagaimana semua ini bekerja,
‫untuk menjadi NODE yang
‫hebat, dan yang terpenting,
‫lebih mandiri. pengembang JS.