1
00:00:00,000 --> 00:00:04,740
[MUSIC]

2
00:00:04,740 --> 00:00:09,065
Trong bài học này, chúng ta sẽ tìm hiểu về cách chúng ta có thể viết các thông báo đơn giản.

3
00:00:09,065 --> 00:00:11,454
Chúng ta cũng sẽ tìm hiểu về các module Node và

4
00:00:11,454 --> 00:00:16,885
cách các module Node cho phép chúng ta sắp xếp các ứng dụng của mình thành nhiều file.

5
00:00:16,885 --> 00:00:20,550
Chúng ta cũng sẽ tìm hiểu về các loại module Node khác nhau và

6
00:00:20,550 --> 00:00:26,450
làm thế nào chúng ta có thể nhập các module Node vào các file của ứng dụng Node của chúng

7
00:00:26,450 --> 00:00:29,260
ta và sử dụng chúng trong ứng dụng của chúng ta.

8
00:00:29,260 --> 00:00:34,640
Trước tiên, chúng ta hãy tìm hiểu về các mô-đun Node một chút chi tiết hơn trong bài giảng này.

9
00:00:36,720 --> 00:00:39,320
JavaScript, khi nó

10
00:00:39,320 --> 00:00:43,900
được thiết kế lần đầu tiên có nghĩa là một ngôn ngữ kịch bản được sử dụng trong trình duyệt.

11
00:00:43,900 --> 00:00:49,510
Vì vậy, lĩnh vực nhỏ trong đó nó được cho là được sử dụng là trình duyệt.

12
00:00:49,510 --> 00:00:54,695
Bây giờ, như bạn đã hiểu từ chuyên môn này, JavaScript đã

13
00:00:54,695 --> 00:01:00,822
vượt ra ngoài ý định ban đầu của nó, và bây giờ đang được sử dụng để viết các ứng dụng.

14
00:01:00,822 --> 00:01:04,688
Cả hai đều được chạy bằng cách sử dụng các framework trong trình duyệt, và

15
00:01:04,688 --> 00:01:09,880
cũng để chạy các ứng dụng ở phía máy chủ, như chúng ta sẽ thấy trong khóa học này.

16
00:01:11,020 --> 00:01:16,100
JavaScript ban đầu không bao giờ được thiết kế với bất kỳ thư viện chung nào.

17
00:01:16,100 --> 00:01:20,907
Nếu bạn nhìn vào các ngôn ngữ lập trình chuẩn như C, C++, Java, v.v...

18
00:01:20,907 --> 00:01:24,374
tất cả chúng đều có các thư viện chuẩn cho phép bạn truy cập

19
00:01:24,374 --> 00:01:26,730
vào phần cứng cơ bản.

20
00:01:26,730 --> 00:01:32,170
Và cũng cung cấp một cách có cấu trúc tổ chức ứng dụng thành

21
00:01:32,170 --> 00:01:36,880
nhiều tệp và sau đó kết hợp chúng lại với nhau khi bạn tạo một ứng dụng.

22
00:01:36,880 --> 00:01:41,580
JavaScript không bao giờ có bất kỳ hỗ trợ này khi nó bắt đầu.

23
00:01:41,580 --> 00:01:45,850
Bởi vì như chúng ta hiểu JavaScript không được thiết kế cho

24
00:01:45,850 --> 00:01:48,330
mục đích mà nó đang được sử dụng ngày nay.

25
00:01:49,420 --> 00:01:50,500
Nhưng tất nhiên,

26
00:01:50,500 --> 00:01:55,710
mọi người hiểu được những khó khăn khi bạn cần mở rộng JavaScript

27
00:01:55,710 --> 00:02:01,340
ra ngoài một tập tin duy nhất được sử dụng như một ngôn ngữ kịch bản cho trình duyệt.

28
00:02:01,340 --> 00:02:04,750
Bây giờ, nếu bạn có một ứng dụng JavaScript rất lớn,

29
00:02:04,750 --> 00:02:10,020
nó sẽ trở nên cồng kềnh khi viết toàn bộ mã trong một tập tin duy nhất.

30
00:02:10,020 --> 00:02:14,890
Và rõ ràng bạn muốn kết quả có thể phá vỡ ứng dụng của bạn thành

31
00:02:14,890 --> 00:02:16,830
nhiều sự kiện.

32
00:02:16,830 --> 00:02:21,760
Bây giờ, không giống như các ngôn ngữ lập trình truyền thống, JavaScript không bao giờ có cách

33
00:02:21,760 --> 00:02:26,945
phân phối mã thành nhiều tập tin và sau đó kết hợp chúng lại với nhau.

34
00:02:26,945 --> 00:02:32,095
Vì vậy, đây là nơi CommonJS API đến để lấp đầy

35
00:02:32,095 --> 00:02:35,859
khoảng trống này lấp đầy nhu cầu cho một số ứng dụng phổ biến.

36
00:02:35,859 --> 00:02:42,832
Và định dạng CommonJS này định nghĩa một định dạng mô-đun có thể được sử dụng để

37
00:02:42,832 --> 00:02:47,282
chia ứng dụng JavaScript của bạn thành nhiều tập tin.

38
00:02:47,282 --> 00:02:51,151
Và Node áp dụng định dạng CommonJS để

39
00:02:51,151 --> 00:02:55,349
tổ chức ứng dụng JavaScript của chúng tôi thành nhiều tập tin.

40
00:02:55,349 --> 00:02:59,861
Và trong JavaScript, với định dạng CommonJS,

41
00:02:59,861 --> 00:03:03,891
mỗi tập tin trở thành mô-đun Node riêng của nó.

42
00:03:03,891 --> 00:03:09,841
Vì vậy, chúng ta hãy tìm hiểu thêm một chút về các module Node trong phần còn lại của bài giảng này.

43
00:03:09,841 --> 00:03:11,931
Vì vậy, như tôi vừa đề cập,

44
00:03:11,931 --> 00:03:16,280
mỗi tập tin trong một ứng dụng Node trở thành mô-đun Node riêng của nó.

45
00:03:16,280 --> 00:03:22,290
Vì vậy, tập tin hoặc tập tin JavaScript xác định ranh giới cho một mô-đun Node.

46
00:03:22,290 --> 00:03:26,160
Vì vậy, trong tập tin đó, đặc tả CommonJS

47
00:03:26,160 --> 00:03:30,770
cung cấp một biến gọi là biến mô-đun đó là một đối tượng JavaScript.

48
00:03:30,770 --> 00:03:36,070
Và điều này cho phép bạn truy cập vào định nghĩa mô-đun hiện tại trong một tập tin.

49
00:03:36,070 --> 00:03:41,020
Và trên đối tượng mô-đun này, bạn có thuộc

50
00:03:41,020 --> 00:03:45,120
tính module.exports xác định xuất từ mô-đun hiện tại.

51
00:03:45,120 --> 00:03:49,010
Vì vậy, khi bạn gán một cái gì đó cho thuộc tính module.exports,

52
00:03:49,010 --> 00:03:54,100
sau đó trở thành giá trị xuất khẩu từ mô-đun hiện tại.

53
00:03:54,100 --> 00:03:59,070
Vì vậy, khi mô-đun này được nhập vào một tập tin khác

54
00:03:59,070 --> 00:04:03,130
của ứng dụng Node của chúng tôi, sau đó bất cứ điều gì được xuất từ mô-đun này

55
00:04:03,130 --> 00:04:06,860
trở nên có sẵn trong ứng dụng thứ hai.

56
00:04:06,860 --> 00:04:09,330
Chúng ta sẽ xem xét một ví dụ trong thời gian ngắn.

57
00:04:09,330 --> 00:04:13,080
Khi bạn cần nhập một mô-đun vào một mô-đun khác,

58
00:04:13,080 --> 00:04:17,700
đây là nơi chức năng require được sử dụng để nhập mô-đun.

59
00:04:17,700 --> 00:04:23,220
Vì vậy, như chúng ta sẽ nhận thấy trong một thời gian ngắn, chức năng require được sử dụng

60
00:04:23,220 --> 00:04:28,800
để nhập một mô-đun Node được định nghĩa trong tập tin khác vào tập tin hiện tại để

61
00:04:28,800 --> 00:04:32,790
nó có thể được sử dụng trong ứng dụng nút của chúng tôi.

62
00:04:33,800 --> 00:04:36,750
Mô-đun nút có thể có ba loại.

63
00:04:36,750 --> 00:04:41,842
Chúng tôi có module Node dựa trên tập tin nơi chúng tôi xác định mô-đun Node trong một tập tin,

64
00:04:41,842 --> 00:04:46,270
trong ứng dụng của chúng tôi và chúng tôi sử dụng nó trong ứng dụng của chúng tôi.

65
00:04:46,270 --> 00:04:51,100
Sau đó, chúng ta có các module cốt lõi đã là một phần của Node.

66
00:04:51,100 --> 00:04:55,610
Các nhà thiết kế Node giữ các mô-đun lõi này cố ý nhỏ để

67
00:04:55,610 --> 00:04:57,970
Node có thể được giữ nhỏ.

68
00:04:57,970 --> 00:05:01,060
Và cũng cung cấp đầy đủ chức năng để

69
00:05:01,060 --> 00:05:05,310
các nhà thiết kế mô-đun bên ngoài có thể thêm vào

70
00:05:05,310 --> 00:05:10,320
chức năng riêng của họ mà có thể được tận dụng khi chúng tôi phát triển các ứng dụng Node.

71
00:05:10,320 --> 00:05:18,580
Vì vậy, các mô-đun cốt lõi bao gồm đường dẫn, hệ thống tập tin, os, util và một vài người khác.

72
00:05:18,580 --> 00:05:22,670
Chúng tôi sẽ gặp một số người trong số họ khi chúng tôi đi cùng trong khóa học này.

73
00:05:22,670 --> 00:05:25,010
Sau đó, chúng ta có các module Node bên ngoài.

74
00:05:25,010 --> 00:05:29,650
Đây là những mô-đun Node bên thứ ba được phát triển bởi các nhà phát triển Node, và

75
00:05:29,650 --> 00:05:33,210
sau đó được cung cấp thông qua hệ sinh thái Node.

76
00:05:33,210 --> 00:05:40,586
Vì vậy, các module Node bên ngoài này có thể được cài đặt trong hệ thống của chúng tôi bằng cách sử dụng NPM.

77
00:05:40,586 --> 00:05:45,363
Vì vậy, nhiều lần bạn sẽ thấy chúng tôi sử dụng NPM cài đặt và

78
00:05:45,363 --> 00:05:50,937
tên của mô-đun Node và đó sẽ được bao gồm trong

79
00:05:50,937 --> 00:05:57,010
ứng dụng Node của chúng tôi trong một thư mục có tên là thư mục node_modules.

80
00:05:57,010 --> 00:06:05,000
Và chúng ta sẽ gặp các module Node bên ngoài trong một bài học sau này trong khóa học này.

81
00:06:05,000 --> 00:06:07,630
Làm thế nào để chúng ta sử dụng các module Node?

82
00:06:07,630 --> 00:06:13,720
Khi bạn cần sử dụng một mô-đun Node trong một tập tin Node khác trong ứng dụng của bạn,

83
00:06:13,720 --> 00:06:16,960
sau đó bạn sẽ sử dụng chức năng require.

84
00:06:16,960 --> 00:06:21,180
Tôi đã đề cập ngắn gọn về chức năng yêu cầu trong một trong những

85
00:06:21,180 --> 00:06:22,440
slide trước đó ở đó.

86
00:06:22,440 --> 00:06:26,420
Chức năng yêu cầu cho các module Node dựa trên tập tin,

87
00:06:26,420 --> 00:06:29,073
bạn sẽ chỉ định điều này như là yêu cầu và

88
00:06:29,073 --> 00:06:33,955
sau đó chỉ định đường dẫn đến tập tin có chứa mô-đun Node.

89
00:06:33,955 --> 00:06:39,560
Vì vậy, bạn sẽ nói require./, tên mô-đun nếu tập tin tồn tại

90
00:06:39,560 --> 00:06:45,590
trong thư mục hiện tại được viết mà ứng dụng Node của bạn tồn tại.

91
00:06:45,590 --> 00:06:51,060
Vì vậy, điều này chỉ định đường dẫn tương đối đến các tập tin từ vị trí hiện tại.

92
00:06:51,060 --> 00:06:54,247
Và cũng cho các mô-đun lõi và bên ngoài,

93
00:06:54,247 --> 00:07:00,260
bạn thường sẽ chỉ định chúng bằng cách nói yêu cầu và tên của mô-đun.

94
00:07:00,260 --> 00:07:03,090
Bạn sẽ chỉ định rõ một đường dẫn cho nó.

95
00:07:03,090 --> 00:07:06,200
Nếu nó là một mô-đun cốt lõi, nó đã là một phần của Node và vì vậy

96
00:07:06,200 --> 00:07:08,120
nó sẽ được tự động bao gồm.

97
00:07:08,120 --> 00:07:13,365
Nếu nó là một mô-đun bên ngoài, sau đó nó sẽ được cài đặt hoặc

98
00:07:13,365 --> 00:07:18,978
trong thư mục node_modules trong thư mục hiện tại, hoặc nếu Node không

99
00:07:18,978 --> 00:07:25,327
tìm thấy mô-đun bên ngoài trong thư mục node_modules trong thư mục hiện tại,

100
00:07:25,327 --> 00:07:31,058
nó sẽ đi lên thư mục cấp cao hơn tiếp theo tìm mô-đun Node đó.

101
00:07:31,058 --> 00:07:33,989
Hoặc thư mục cấp cao hơn tiếp theo và

102
00:07:33,989 --> 00:07:39,143
lên hệ thống phân cấp cho đến khi nó định vị các mô-đun Node mà

103
00:07:39,143 --> 00:07:44,390
sau đó sẽ được nhập khẩu để được sử dụng trong ứng dụng Node của bạn.

104
00:07:44,390 --> 00:07:48,040
Nếu nó không thể tìm thấy mô-đun Node lên hệ thống phân cấp,

105
00:07:48,040 --> 00:07:52,640
sau đó nó rõ ràng sẽ tăng một lỗi nói rằng mô-đun Node bị thiếu.

106
00:07:52,640 --> 00:07:57,690
Cách tổ chức này rất hữu ích trong cách

107
00:07:57,690 --> 00:08:03,220
cấu trúc ứng dụng Node được định nghĩa vì chúng ta sẽ gặp

108
00:08:04,840 --> 00:08:08,460
nhiều hơn trong phần sau của khóa học này.

109
00:08:08,460 --> 00:08:13,530
Với phần giới thiệu nhanh về mô-đun Node này, chúng ta hãy xem một ví dụ

110
00:08:13,530 --> 00:08:19,150
mà chúng ta sẽ làm như một phần của bài tập sau bài giảng này.

111
00:08:19,150 --> 00:08:23,210
Như chúng ta đã học được trong bài giảng này,

112
00:08:23,210 --> 00:08:28,040
ranh giới của một mô-đun Node được định nghĩa bởi tập tin có chứa mã ở đây.

113
00:08:28,040 --> 00:08:34,060
Vì vậy, ở đây, tôi có một ví dụ về một mô-đun Node được định nghĩa là rectangle.js.

114
00:08:34,060 --> 00:08:38,113
Và trong đó bạn có thể thấy rằng tôi đang sử dụng hai xuất khẩu ở đây,

115
00:08:38,113 --> 00:08:42,096
Tôi đang nói exports.perimeter và exports.area.

116
00:08:42,096 --> 00:08:47,401
Và bạn sẽ thấy rằng ở đây tôi không sử dụng module.

117
00:08:47,401 --> 00:08:52,740
exports vì xuất khẩu chính nó cũng là một phiên bản rút gọn của module.exports.

118
00:08:52,740 --> 00:08:57,057
Vì vậy, nếu bạn không muốn sử dụng module.exports hoàn toàn nhưng

119
00:08:57,057 --> 00:09:01,804
thay vào đó chỉ muốn xuất khẩu, thì đây là một cách khác để viết

120
00:09:01,804 --> 00:09:06,316
những mục được xuất khẩu từ các module Node hiện tại.

121
00:09:06,316 --> 00:09:09,875
Vì vậy, ở đây chúng tôi đang xuất hai chức năng, chu vi và

122
00:09:09,875 --> 00:09:12,750
khu vực từ mô-đun Node hình chữ nhật.

123
00:09:12,750 --> 00:09:17,679
Bây giờ để sử dụng mô-đun này trong

124
00:09:17,679 --> 00:09:21,870
một tập tin khác, sau đó chúng ta hãy nhìn vào tập tin index.js.

125
00:09:21,870 --> 00:09:27,240
Và dòng đầu tiên trong tập tin này, bạn sẽ nhận thấy rằng nó nói

126
00:09:27,240 --> 00:09:32,220
var rect = yêu cầu và trong dấu ngoặc kép,. /hình chữ nhật.

127
00:09:32,220 --> 00:09:36,650
Vì vậy, điều này là xác định rằng các mô-đun hình chữ nhật sẽ là quan trọng trong đây,

128
00:09:36,650 --> 00:09:42,090
tôi đã sử dụng trong tập tin đặc biệt này của ứng dụng.

129
00:09:42,090 --> 00:09:45,670
Vì vậy, đây là cách chúng tôi sẽ định nghĩa mô-đun Node, và

130
00:09:45,670 --> 00:09:50,080
đây là một ví dụ về một mô-đun Node dựa trên tập tin.

131
00:09:50,080 --> 00:09:52,197
Chúng ta sẽ gặp phải các module cốt lõi và

132
00:09:52,197 --> 00:09:56,438
các module Node bên ngoài trong các bài học sau của khóa học này.

133
00:09:56,438 --> 00:10:02,669
[ NHẠC]