﻿1
00:00:01,390 --> 00:00:03,570
‫Jonas: Sebagai bagian terakhir di bagian ini, mari

2
00:00:03,570 --> 00:00:06,660
‫kita bicara tentang bagaimana NODE. Modul JS benar-benar bekerja di

3
00:00:06,660 --> 00:00:07,623
‫belakang layar.

4
00:00:09,220 --> 00:00:11,980
‫Pertama-tama di NODE. Sistem modul

5
00:00:11,980 --> 00:00:15,660
‫JS setiap file JavaScript diperlakukan sebagai modul terpisah.

6
00:00:15,660 --> 00:00:18,120
‫Dan kami sudah bermain-main sedikit dengan

7
00:00:18,120 --> 00:00:19,722
‫modul di persimpangan,

8
00:00:19,722 --> 00:00:21,780
‫'khususnya dengan menggunakan fungsi yang

9
00:00:21,780 --> 00:00:23,920
‫dibutuhkan dan mengekspor data dari modul.

10
00:00:23,920 --> 00:00:27,150
‫Jadi itulah dasar-dasar modul Common JS yang merupakan

11
00:00:27,150 --> 00:00:29,770
‫sistem modul yang digunakan node.

12
00:00:29,770 --> 00:00:33,010
‫Karena itu bekerja dengan sangat baik di server.

13
00:00:33,010 --> 00:00:35,930
‫Sekarang, ada juga skrip ECMA asli atau sistem

14
00:00:35,930 --> 00:00:37,620
‫modul ES yang

15
00:00:37,620 --> 00:00:39,870
‫mungkin sudah Anda kenal, 'khususnya jika

16
00:00:39,870 --> 00:00:42,060
‫Anda mengambil kursus JavaScript saya, atau

17
00:00:42,060 --> 00:00:43,950
‫jika Anda telah menulis JavaScript

18
00:00:43,950 --> 00:00:45,840
‫di bagian depan akhir-akhir ini.

19
00:00:45,840 --> 00:00:49,270
‫Sistem modul ES yang saya bicarakan ini

20
00:00:49,270 --> 00:00:53,310
‫dikembangkan untuk bekerja di browser menggunakan sintaks ekspor impor.

21
00:00:53,310 --> 00:00:55,640
‫Jadi, saya hanya ingin memperjelas bahwa ini

22
00:00:55,640 --> 00:00:57,980
‫adalah dua sistem modul berbeda yang akan

23
00:00:57,980 --> 00:00:59,030
‫Anda lihat

24
00:00:59,030 --> 00:01:00,950
‫dalam situasi berbeda, jadi jangan bingung.

25
00:01:00,950 --> 00:01:03,110
‫Ada juga upaya untuk mengimplementasikan modul ES

26
00:01:03,110 --> 00:01:05,699
‫asli di NODE. JS, 'khusus menggunakan

27
00:01:05,699 --> 00:01:07,280
‫ekstensi file seperti

28
00:01:07,280 --> 00:01:09,130
‫. mjs.

29
00:01:09,130 --> 00:01:10,870
‫Namun sejauh ini, itu tidak

30
00:01:10,870 --> 00:01:12,940
‫benar-benar menjadi hal yang populer untuk digunakan.

31
00:01:12,940 --> 00:01:14,630
‫Jadi, kecuali Anda menonton kursus

32
00:01:14,630 --> 00:01:16,140
‫ini di masa

33
00:01:16,140 --> 00:01:17,970
‫mendatang, Anda mungkin akan selalu

34
00:01:17,970 --> 00:01:20,223
‫menggunakan sistem Common JS dengan node.js.

35
00:01:21,070 --> 00:01:23,600
‫Sekarang, Anda mungkin bertanya-tanya mengapa di NODE. JS masing-masing

36
00:01:23,600 --> 00:01:26,350
‫dan setiap modul benar-benar mendapatkan akses

37
00:01:26,350 --> 00:01:28,420
‫ke fungsi yang diperlukan untuk

38
00:01:28,420 --> 00:01:30,780
‫mengimpor modul di tempat pertama.

39
00:01:30,780 --> 00:01:31,700
‫Benar?

40
00:01:31,700 --> 00:01:34,570
‫Maksud saya, ini bukan fungsi JavaScript standar.

41
00:01:34,570 --> 00:01:36,040
‫Jadi dari mana asalnya?

42
00:01:36,040 --> 00:01:39,080
‫Dan bagaimana tepatnya cara kerjanya di belakang layar?

43
00:01:39,080 --> 00:01:40,763
‫Nah, mari kita cari tahu.

44
00:01:42,070 --> 00:01:43,780
‫Jadi pertanyaannya di

45
00:01:43,780 --> 00:01:45,930
‫sini adalah, apa yang terjadi

46
00:01:45,930 --> 00:01:48,540
‫setiap kali kita membutuhkan modul dengan

47
00:01:48,540 --> 00:01:51,620
‫memanggil fungsi require dengan nama modul, adalah argumennya.

48
00:01:51,620 --> 00:01:53,270
‫Sebagai gambaran yang

49
00:01:53,270 --> 00:01:56,270
‫sangat luas, langkah-langkah berikut dijalankan di belakang layar.

50
00:01:56,270 --> 00:01:58,890
‫Pertama, jalur ke modul

51
00:01:58,890 --> 00:02:01,600
‫yang diperlukan diselesaikan dan file dimuat.

52
00:02:01,600 --> 00:02:04,290
‫Kemudian proses yang disebut pembungkus

53
00:02:04,290 --> 00:02:05,130
‫terjadi

54
00:02:05,130 --> 00:02:07,210
‫setelah itu, kode modul

55
00:02:07,210 --> 00:02:09,760
‫dijalankan dan ekspor modul dikembalikan.

56
00:02:09,760 --> 00:02:12,963
‫Dan akhirnya seluruh modul di-cache.

57
00:02:14,300 --> 00:02:17,550
‫Jadi sekarang mari kita lihat setiap langkah secara lebih rinci.

58
00:02:17,550 --> 00:02:20,570
‫Pertama, bagaimana node mengetahui file mana yang akan

59
00:02:20,570 --> 00:02:22,640
‫dimuat saat kita membutuhkan modul?

60
00:02:22,640 --> 00:02:24,970
‫Karena ingat, kita sebenarnya dapat

61
00:02:24,970 --> 00:02:27,410
‫memuat tiga jenis modul yang berbeda.

62
00:02:27,410 --> 00:02:29,030
‫Modul inti Node, modul

63
00:02:29,030 --> 00:02:32,400
‫kita sendiri atau modul pihak ketiga dari npm like express

64
00:02:32,400 --> 00:02:34,990
‫yang merupakan kerangka kerja node yang akan

65
00:02:34,990 --> 00:02:37,380
‫kita gunakan di sebagian besar kursus.

66
00:02:37,380 --> 00:02:40,940
‫Jadi proses ini dikenal sebagai menyelesaikan jalur file.

67
00:02:40,940 --> 00:02:42,820
‫Dan inilah cara kerjanya.

68
00:02:42,820 --> 00:02:45,500
‫Ketika fungsi yang membutuhkan menerima nama modul

69
00:02:45,500 --> 00:02:46,810
‫sebagai inputnya, pertama-tama

70
00:02:46,810 --> 00:02:50,280
‫ia akan mencoba memuat modul inti dengan nama itu.

71
00:02:50,280 --> 00:02:52,860
‫Seperti misalnya modul http.

72
00:02:52,860 --> 00:02:55,570
‫Ini akan secara otomatis menemukan jalur ke modul

73
00:02:55,570 --> 00:02:57,130
‫itu dan kemudian memuatnya.

74
00:02:57,130 --> 00:02:59,150
‫Sekarang jika jalur dimulai dengan satu

75
00:02:59,150 --> 00:03:00,160
‫titik, atau dua

76
00:03:00,160 --> 00:03:02,280
‫titik, itu berarti itu adalah modul pengembang.

77
00:03:02,280 --> 00:03:06,010
‫Karena kami menunjukkan jalur relatif ke file kami.

78
00:03:06,010 --> 00:03:08,380
‫Jadi node akan mencoba memuat file

79
00:03:08,380 --> 00:03:11,130
‫itu, tetapi jika tidak ada file dengan nama

80
00:03:11,130 --> 00:03:13,180
‫itu, maka node akan mencari

81
00:03:13,180 --> 00:03:16,870
‫folder dan memuat index. js jika ada di folder itu.

82
00:03:16,870 --> 00:03:18,060
‫Jadi dalam contoh

83
00:03:18,060 --> 00:03:21,370
‫ini, ia akan mencoba memuat lib/controller. js.

84
00:03:21,370 --> 00:03:23,600
‫Ingat bahwa kita dapat menghapus titik

85
00:03:23,600 --> 00:03:25,600
‫js saat membutuhkan modul.

86
00:03:25,600 --> 00:03:28,570
‫Jika tidak ada file di jalur

87
00:03:28,570 --> 00:03:30,360
‫ini, ia

88
00:03:30,360 --> 00:03:34,450
‫akan mencoba membuka index. js dari folder lib/controller sebagai gantinya.

89
00:03:34,450 --> 00:03:35,900
‫Masuk akal?

90
00:03:35,900 --> 00:03:37,890
‫Dan akhirnya, jika modul yang

91
00:03:37,890 --> 00:03:39,330
‫diperlukan bukan

92
00:03:39,330 --> 00:03:41,290
‫modul inti, atau modul

93
00:03:41,290 --> 00:03:44,470
‫pengembang, node akan menganggapnya sebagai modul dari npm.

94
00:03:44,470 --> 00:03:47,910
‫Dan ingat, pada modul yang kita muat dari npm, sebenarnya

95
00:03:47,910 --> 00:03:51,050
‫kita tidak perlu menulis path saat kita membutuhkannya.

96
00:03:51,050 --> 00:03:52,150
‫Hanya nama

97
00:03:52,150 --> 00:03:55,130
‫modul, cara kerjanya pada modul inti.

98
00:03:55,130 --> 00:03:57,470
‫Jadi modul pihak ketiga ini disimpan

99
00:03:57,470 --> 00:03:59,250
‫dalam folder modul node,

100
00:03:59,250 --> 00:04:02,280
‫jadi node akan masuk ke folder itu dan mencoba

101
00:04:02,280 --> 00:04:04,960
‫mencari modul di sana dan kemudian memuatnya.

102
00:04:04,960 --> 00:04:07,860
‫Dan tentu saja, jika file tidak dapat ditemukan

103
00:04:07,860 --> 00:04:10,410
‫di mana pun, maka akan terjadi kesalahan

104
00:04:10,410 --> 00:04:12,043
‫dan eksekusi aplikasi dihentikan.

105
00:04:13,861 --> 00:04:16,450
‫Selanjutnya, setelah modul dimuat,

106
00:04:16,450 --> 00:04:20,230
‫kode modul dibungkus menjadi fungsi khusus yang

107
00:04:20,230 --> 00:04:24,098
‫akan memberi kita akses ke beberapa objek khusus.

108
00:04:24,098 --> 00:04:27,370
‫Jadi langkah ini adalah tempat keajaiban terjadi.

109
00:04:27,370 --> 00:04:30,260
‫Di sinilah kita mendapatkan jawaban atas pertanyaan itu, dari

110
00:04:30,260 --> 00:04:33,290
‫mana sebenarnya fungsi yang dibutuhkan itu berasal dan mengapa

111
00:04:33,290 --> 00:04:35,403
‫kita memiliki akses ke sana?

112
00:04:36,290 --> 00:04:38,190
‫Itu karena nodejs menjalankan waktu,

113
00:04:38,190 --> 00:04:39,860
‫mengambil kode dari modul

114
00:04:39,860 --> 00:04:42,450
‫kami dan meletakkannya di dalam ekspresi fungsi

115
00:04:42,450 --> 00:04:46,390
‫yang segera dipanggil, atau IIFE yang dapat Anda lihat di sini.

116
00:04:46,390 --> 00:04:48,330
‫Jadi node sebenarnya tidak

117
00:04:48,330 --> 00:04:51,500
‫secara langsung mengeksekusi kode yang saya tulis ulang

118
00:04:51,500 --> 00:04:54,530
‫ke dalam file, melainkan fungsi wrapper yang akan

119
00:04:54,530 --> 00:04:56,770
‫berisi kode kita di tubuhnya.

120
00:04:56,770 --> 00:05:00,010
‫Ini juga melewati para ahli yang membutuhkan

121
00:05:00,010 --> 00:05:03,360
‫modul, nama file dan objek dir ke dalamnya.

122
00:05:03,360 --> 00:05:05,820
‫Jadi itu sebabnya di setiap modul

123
00:05:05,820 --> 00:05:07,730
‫kami secara otomatis memiliki

124
00:05:07,730 --> 00:05:10,450
‫akses ke hal-hal seperti fungsi yang diperlukan.

125
00:05:10,450 --> 00:05:12,870
‫Jadi ini pada dasarnya seperti

126
00:05:12,870 --> 00:05:15,703
‫variabel global yang disuntikkan ke setiap modul.

127
00:05:17,150 --> 00:05:21,420
‫Sekarang dengan melakukan ini, node mencapai dua hal yang sangat penting.

128
00:05:21,420 --> 00:05:24,010
‫Pertama, tentu saja, memberikan pengembang akses ke

129
00:05:24,010 --> 00:05:26,450
‫semua variabel yang baru saja kita

130
00:05:26,450 --> 00:05:28,520
‫bicarakan, yang sangat membantu.

131
00:05:28,520 --> 00:05:31,160
‫Kedua, itu membuat variabel tingkat atas yang kita

132
00:05:31,160 --> 00:05:33,320
‫definisikan dalam modul kita tetap pribadi.

133
00:05:33,320 --> 00:05:36,080
‫Jadi itu hanya dicakup untuk modul

134
00:05:36,080 --> 00:05:39,690
‫saat ini alih-alih membocorkan semuanya ke objek global.

135
00:05:39,690 --> 00:05:41,060
‫Jadi bayangkan sejenak,

136
00:05:41,060 --> 00:05:44,640
‫bahwa kita mendeklarasikan variabel x di salah satu modul

137
00:05:44,640 --> 00:05:48,050
‫kita dan kemudian menyertakan modul npm yang juga

138
00:05:48,050 --> 00:05:49,840
‫menggunakan variabel bernama x.

139
00:05:49,840 --> 00:05:51,640
‫Tanpa mekanisme ini,

140
00:05:51,640 --> 00:05:54,080
‫variabel kita sendiri kemudian akan ditimpa

141
00:05:54,080 --> 00:05:56,600
‫dan seluruh aplikasi tidak akan berfungsi.

142
00:05:56,600 --> 00:05:59,370
‫Jadi setiap modul yang memiliki ruang lingkup

143
00:05:59,370 --> 00:06:01,950
‫pribadi sangat penting dan dicapai melalui

144
00:06:01,950 --> 00:06:05,000
‫trik cerdas untuk membungkus kode kita ke dalam

145
00:06:05,000 --> 00:06:06,423
‫fungsi khusus ini.

146
00:06:08,080 --> 00:06:10,400
‫Sekarang mari kita lihat sekilas setiap objek

147
00:06:10,400 --> 00:06:11,960
‫yang didapat modul kita.

148
00:06:11,960 --> 00:06:13,710
‫Pertama fungsi require, yang

149
00:06:13,710 --> 00:06:15,290
‫sudah kita ketahui.

150
00:06:15,290 --> 00:06:17,260
‫Lalu, ada objek modul, yang

151
00:06:17,260 --> 00:06:19,760
‫hanya merupakan referensi ke modul saat ini

152
00:06:19,760 --> 00:06:21,410
‫dan yang bagi kami

153
00:06:21,410 --> 00:06:23,800
‫paling penting dalam hal mengekspor data.

154
00:06:23,800 --> 00:06:26,230
‫Hal yang sama berlaku untuk objek ekspor

155
00:06:26,230 --> 00:06:28,520
‫yang akan kita bahas sebentar lagi.

156
00:06:28,520 --> 00:06:30,490
‫Akhirnya, ada nama file

157
00:06:30,490 --> 00:06:33,150
‫variabel kenyamanan dan nama dir yang

158
00:06:33,150 --> 00:06:35,240
‫hanya berisi path absolut ke

159
00:06:35,240 --> 00:06:36,890
‫file modul

160
00:06:36,890 --> 00:06:40,200
‫saat ini serta nama direktori saat ini.

161
00:06:40,200 --> 00:06:44,023
‫Dan begitulah cara kerja langkah pembungkus memuat modul.

162
00:06:45,060 --> 00:06:47,280
‫Selanjutnya, kode dalam modul, atau

163
00:06:47,280 --> 00:06:48,840
‫lebih tepatnya,

164
00:06:48,840 --> 00:06:50,940
‫dalam fungsi pembungkus modul,

165
00:06:50,940 --> 00:06:54,240
‫benar-benar dieksekusi oleh NODE. waktu pengerjaan JS.

166
00:06:54,240 --> 00:06:55,693
‫Jadi, tidak ada yang mewah di sini.

167
00:06:57,460 --> 00:06:58,810
‫Sampai saat

168
00:06:58,810 --> 00:07:01,980
‫ini, fungsi require telah dipanggil dengan nama

169
00:07:01,980 --> 00:07:03,559
‫modul karena argumen

170
00:07:03,559 --> 00:07:07,200
‫path ke file modul telah diselesaikan menjadi file yang

171
00:07:07,200 --> 00:07:10,370
‫dimuat, semua kode telah dibungkus ke dalam

172
00:07:10,370 --> 00:07:12,461
‫fungsi wrapper yang kemudian dieksekusi.

173
00:07:12,461 --> 00:07:15,190
‫Sekarang, saatnya fungsi require

174
00:07:15,190 --> 00:07:17,320
‫benar-benar mengembalikan sesuatu.

175
00:07:17,320 --> 00:07:21,840
‫Dan apa yang dikembalikannya adalah ekspor modul yang diperlukan.

176
00:07:21,840 --> 00:07:25,503
‫Ekspor ini disimpan dalam modul. objek ekspor.

177
00:07:26,860 --> 00:07:29,260
‫Mungkin terlihat sedikit seperti ini.

178
00:07:29,260 --> 00:07:32,300
‫Jadi, sekali lagi, di setiap modul kita dapat

179
00:07:32,300 --> 00:07:36,300
‫mengekspor variabel, yang pada akhirnya akan dikembalikan oleh fungsi yang dibutuhkan.

180
00:07:36,300 --> 00:07:40,490
‫Dan kami melakukannya dengan menetapkan variabel ke modul. ekspor atau hanya untuk mengekspor

181
00:07:40,490 --> 00:07:42,190
‫di mana itu

182
00:07:42,190 --> 00:07:45,600
‫hanya penunjuk ke modul. ekspor.

183
00:07:45,600 --> 00:07:47,600
‫Kami akan melakukan ini dalam

184
00:07:47,600 --> 00:07:50,250
‫praktik di video berikutnya, karena saya tahu ini terdengar

185
00:07:50,250 --> 00:07:52,270
‫agak membingungkan ketika saya mengatakannya seperti ini.

186
00:07:52,270 --> 00:07:54,140
‫Bagaimanapun, inilah yang perlu Anda

187
00:07:54,140 --> 00:07:58,370
‫ketahui tentang kapan harus menggunakan module. ekspor atau hanya ekspor.

188
00:07:58,370 --> 00:08:02,220
‫Jadi jika semua yang ingin Anda lakukan adalah mengekspor satu variabel

189
00:08:02,220 --> 00:08:04,460
‫tunggal, seperti satu kelas atau satu fungsi,

190
00:08:04,460 --> 00:08:07,890
‫Anda biasanya menggunakan modul. ekspor dan atur sama

191
00:08:07,890 --> 00:08:10,050
‫dengan variabel yang ingin Anda ekspor.

192
00:08:10,050 --> 00:08:12,010
‫Sama seperti dalam contoh ini.

193
00:08:12,010 --> 00:08:13,000
‫Di

194
00:08:13,000 --> 00:08:16,120
‫sisi lain, jika Anda ingin mengekspor beberapa

195
00:08:16,120 --> 00:08:18,300
‫variabel bernama seperti beberapa fungsi,

196
00:08:18,300 --> 00:08:19,330
‫misalnya, Anda

197
00:08:19,330 --> 00:08:22,280
‫harus membuatnya sebagai properti dari objek ekspor.

198
00:08:22,280 --> 00:08:25,690
‫Misalnya, jika kami membuat modul kalkulator, Anda dapat

199
00:08:25,690 --> 00:08:29,260
‫membuat ekspor. tambah, ekspor.

200
00:08:29,260 --> 00:08:32,490
‫memperbanyak, ekspor. membagi dan sebagainya dan sebagainya.

201
00:08:32,490 --> 00:08:33,560
‫Masuk akal?

202
00:08:33,560 --> 00:08:35,960
‫Sekali lagi, kita akan melakukan ini di video berikutnya dan itu

203
00:08:35,960 --> 00:08:38,110
‫akan lebih masuk akal bagi Anda saat itu.

204
00:08:39,230 --> 00:08:42,530
‫Ini secara efektif bagaimana kami mengekspor dan mengimpor data

205
00:08:42,530 --> 00:08:44,980
‫dari satu modul ke modul lainnya.

206
00:08:44,980 --> 00:08:47,410
‫Tentu saja, ini juga mengapa kami

207
00:08:47,410 --> 00:08:51,500
‫biasanya menetapkan hasil dari fungsi yang dibutuhkan yang dipanggil ke variabel baru.

208
00:08:51,500 --> 00:08:54,003
‫Sehingga kita bisa menghemat ekspor yang dikembalikan.

209
00:08:55,140 --> 00:08:57,570
‫Sekarang, hanya untuk menyelesaikan video

210
00:08:57,570 --> 00:09:00,500
‫ini dengan sangat cepat, langkah terakhir adalah modul

211
00:09:00,500 --> 00:09:03,090
‫sebenarnya di-cache setelah pertama kali dimuat.

212
00:09:03,090 --> 00:09:05,850
‫Artinya, jika Anda memerlukan modul yang sama

213
00:09:05,850 --> 00:09:08,890
‫beberapa kali, Anda akan selalu mendapatkan hasil yang sama.

214
00:09:08,890 --> 00:09:12,490
‫Dan kode dalam modul sebenarnya hanya dieksekusi pada

215
00:09:12,490 --> 00:09:13,640
‫panggilan pertama.

216
00:09:13,640 --> 00:09:15,100
‫Dalam panggilan

217
00:09:15,100 --> 00:09:18,470
‫berikutnya, hasilnya hanya diambil dari cache.

218
00:09:18,470 --> 00:09:19,520
‫Sempurna.

219
00:09:19,520 --> 00:09:21,730
‫Jadi saya harap semua logika di

220
00:09:21,730 --> 00:09:23,390
‫balik cara bekerja

221
00:09:23,390 --> 00:09:25,860
‫dengan modul tidak lagi terlihat ajaib.

222
00:09:25,860 --> 00:09:28,570
‫Sangat penting untuk mengetahui bagaimana semua ini bekerja,

223
00:09:28,570 --> 00:09:30,130
‫untuk menjadi NODE yang

224
00:09:30,130 --> 00:09:31,390
‫hebat, dan yang terpenting,

225
00:09:31,390 --> 00:09:33,833
‫lebih mandiri. pengembang JS.

