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

2
00:00:04,740 --> 00:00:09,065
في هذا الدرس، سوف نتعلَّم كيف يمكننا كتابة إشعارات بسيطة.

3
00:00:09,065 --> 00:00:11,454
سنتعرف أيضًا على وحدات Node

4
00:00:11,454 --> 00:00:16,885
وكيف تمكننا وحدات Node من تنظيم تطبيقاتنا في ملفات متعددة.

5
00:00:16,885 --> 00:00:20,550
سنتعرف أيضًا على أنواع مختلفة من وحدات العقدة

6
00:00:20,550 --> 00:00:26,450
وكيف يمكننا استيراد وحدات العقدة إلى ملفاتنا الخاصة بتطبيق العقدة

7
00:00:26,450 --> 00:00:29,260
والاستفادة منها داخل تطبيقنا.

8
00:00:29,260 --> 00:00:34,640
أولا، دعونا نتعرف على وحدات العقدة بمزيد من التفصيل في هذه المحاضرة.

9
00:00:36,720 --> 00:00:39,320
جافا سكريبت، عندما تم تصميمه لأول مرة

10
00:00:39,320 --> 00:00:43,900
كان من المفترض أن تكون لغة البرمجة النصية لاستخدامها داخل المتصفح.

11
00:00:43,900 --> 00:00:49,510
وبالتالي فإن المجال الصغير الذي كان من المفترض أن تستخدم فيه هو المتصفح.

12
00:00:49,510 --> 00:00:54,695
الآن، كما تفهم من هذا التخصص، فقد

13
00:00:54,695 --> 00:01:00,822
تجاوزت جافا سكريبت هدفها الأصلي، ويجري الآن استخدامها لكتابة التطبيقات.

14
00:01:00,822 --> 00:01:04,688
كلاهما ليتم تشغيله باستخدام أطر العمل داخل المتصفح،

15
00:01:04,688 --> 00:01:09,880
وأيضا لتشغيل التطبيقات على جانب الخادم، كما سنرى في هذه الدورة.

16
00:01:11,020 --> 00:01:16,100
لم يتم تصميم جافا سكريبت في الأصل مع أي مكتبات مشتركة.

17
00:01:16,100 --> 00:01:20,907
إذا نظرت إلى لغات البرمجة القياسية مثل C و C ++ و Java وما إلى ذلك،

18
00:01:20,907 --> 00:01:24,374
فجميعها تحتوي على مكتبات قياسية تمكنك من الوصول

19
00:01:24,374 --> 00:01:26,730
إلى الأجهزة الأساسية.

20
00:01:26,730 --> 00:01:32,170
وأيضا توفير طريقة منظمة لتنظيم التطبيق في

21
00:01:32,170 --> 00:01:36,880
ملفات متعددة ومن ثم الجمع بينهما معا عند إنشاء تطبيق.

22
00:01:36,880 --> 00:01:41,580
لم يكن لدى JavaScript أي من هذا الدعم عندما بدأ.

23
00:01:41,580 --> 00:01:45,850
لأنه كما نفهم لم يتم تصميم جافا سكريبت

24
00:01:45,850 --> 00:01:48,330
للغرض الذي يتم استخدامه من أجله اليوم.

25
00:01:49,420 --> 00:01:50,500
ولكن بالطبع،

26
00:01:50,500 --> 00:01:55,710
فهم الناس الصعوبات عندما تحتاج إلى توسيع جافا سكريبت

27
00:01:55,710 --> 00:02:01,340
وراء ملف واحد يستخدم كلغة برمجة للمتصفح.

28
00:02:01,340 --> 00:02:04,750
الآن، إذا كان لديك تطبيق JavaScript كبير جدًا،

29
00:02:04,750 --> 00:02:10,020
يصبح من الصعب كتابة الشفرة بأكملها في ملف واحد.

30
00:02:10,020 --> 00:02:14,890
ومن الواضح أنك تريد أن تكون النتائج قادرة على كسر التطبيق الخاص بك إلى

31
00:02:14,890 --> 00:02:16,830
حقائق متعددة.

32
00:02:16,830 --> 00:02:21,760
الآن، على عكس لغات البرمجة التقليدية، لم يكن لدى JavaScript طريقة

33
00:02:21,760 --> 00:02:26,945
لتوزيع الشفرة في ملفات متعددة ثم دمجها معًا.

34
00:02:26,945 --> 00:02:32,095
لذلك هذا هو المكان الذي جاءت فيه واجهة برمجة تطبيقات CommonJS لملء هذه

35
00:02:32,095 --> 00:02:35,859
الفجوة التي تملأ الاحتياجات لبعض التطبيقات الشائعة.

36
00:02:35,859 --> 00:02:42,832
ويحدد تنسيق CommonJS هذا تنسيق الوحدة النمطية التي يمكن استخدامها

37
00:02:42,832 --> 00:02:47,282
لتقسيم تطبيق JavaScript الخاص بك إلى ملفات متعددة.

38
00:02:47,282 --> 00:02:51,151
و عقدة تعتمد هذا الشكل CommonJS

39
00:02:51,151 --> 00:02:55,349
لتنظيم تطبيق جافا سكريبت لدينا في ملفات متعددة.

40
00:02:55,349 --> 00:02:59,861
وداخل جافا سكريبت، مع تنسيق CommonJS،

41
00:02:59,861 --> 00:03:03,891
يصبح كل ملف وحدة العقدة الخاصة به.

42
00:03:03,891 --> 00:03:09,841
لذلك دعونا نتعلم أكثر قليلا عن وحدات العقدة في بقية هذه المحاضرة.

43
00:03:09,841 --> 00:03:11,931
لذلك كما ذكرت للتو،

44
00:03:11,931 --> 00:03:16,280
يصبح كل ملف في تطبيق عقدة وحدة العقدة الخاصة به.

45
00:03:16,280 --> 00:03:22,290
لذلك يحدد الملف أو ملف JavaScript الحدود لوحدة العقدة.

46
00:03:22,290 --> 00:03:26,160
لذلك داخل هذا الملف،

47
00:03:26,160 --> 00:03:30,770
توفر مواصفات CommonJS متغيرًا يسمى متغير الوحدة النمطية وهو كائن JavaScript.

48
00:03:30,770 --> 00:03:36,070
وهذا يمنحك الوصول إلى تعريف الوحدة النمطية الحالي داخل ملف.

49
00:03:36,070 --> 00:03:41,020
وعلى كائن الوحدة النمطية هذا، لديك

50
00:03:41,020 --> 00:03:45,120
خاصية module.exports التي تحدد التصدير من الوحدة النمطية الحالية.

51
00:03:45,120 --> 00:03:49,010
لذلك عند تعيين شيء إلى الخاصية module.exports،

52
00:03:49,010 --> 00:03:54,100
فإن ذلك يصبح القيمة المصدرة من الوحدة النمطية الحالية.

53
00:03:54,100 --> 00:03:59,070
بحيث عندما يتم استيراد هذه الوحدة إلى ملف آخر

54
00:03:59,070 --> 00:04:03,130
من تطبيق عقدة لدينا، ثم كل ما يتم تصديره من هذه الوحدة

55
00:04:03,130 --> 00:04:06,860
يصبح متاحا في التطبيق الثاني.

56
00:04:06,860 --> 00:04:09,330
سنلقي نظرة على مثال باختصار في حين.

57
00:04:09,330 --> 00:04:13,080
عندما تحتاج إلى استيراد وحدة نمطية إلى وحدة نمطية أخرى،

58
00:04:13,080 --> 00:04:17,700
فهذا هو المكان الذي يتم فيه استخدام الدالة المطلوبة لاستيراد الوحدة النمطية.

59
00:04:17,700 --> 00:04:23,220
لذلك كما سنلاحظ في فترة قصيرة، يتم استخدام وظيفة تتطلب

60
00:04:23,220 --> 00:04:28,800
لاستيراد وحدة عقدة التي يتم تعريفها في ملف آخر إلى الملف الحالي

61
00:04:28,800 --> 00:04:32,790
بحيث يمكن استخدامها داخل تطبيق عقدة لدينا.

62
00:04:33,800 --> 00:04:36,750
يمكن أن تكون وحدات العقدة من ثلاث فئات.

63
00:04:36,750 --> 00:04:41,842
لدينا وحدات العقدة المستندة إلى الملف حيث نحدد وحدة العقدة داخل ملف،

64
00:04:41,842 --> 00:04:46,270
داخل تطبيقنا ونستفيد منه داخل تطبيقنا.

65
00:04:46,270 --> 00:04:51,100
ثم، لدينا الوحدات الأساسية التي هي بالفعل جزء من عقدة.

66
00:04:51,100 --> 00:04:55,610
أبقى مصممو العقدة هذه الوحدات الأساسية صغيرة عمدا

67
00:04:55,610 --> 00:04:57,970
بحيث يمكن الاحتفاظ عقدة صغيرة.

68
00:04:57,970 --> 00:05:01,060
كما توفر وظائف كافية

69
00:05:01,060 --> 00:05:05,310
بحيث يمكن لمصممي الوحدة الخارجية إضافة

70
00:05:05,310 --> 00:05:10,320
وظائفهم الخاصة التي يمكن الاستفادة منها عندما قمنا بتطوير تطبيقات العقدة.

71
00:05:10,320 --> 00:05:18,580
وبالتالي فإن الوحدات الأساسية تشمل المسار، ونظام الملفات، ونظام التشغيل، واستخدام وعدد قليل من الآخرين.

72
00:05:18,580 --> 00:05:22,670
سوف نواجه البعض منهم ونحن نذهب على طول في هذه الدورة.

73
00:05:22,670 --> 00:05:25,010
ثم لدينا وحدات العقدة الخارجية.

74
00:05:25,010 --> 00:05:29,650
هذه هي وحدات عقدة طرف ثالث التي تم تطويرها من قبل مطوري عقدة، ومن

75
00:05:29,650 --> 00:05:33,210
ثم توفيرها من خلال النظام البيئي عقدة.

76
00:05:33,210 --> 00:05:40,586
لذلك يمكن تثبيت وحدات العقدة الخارجية هذه داخل نظامنا باستخدام الآلية الوقائية الوطنية.

77
00:05:40,586 --> 00:05:45,363
كثيرًا ما ترانا نستخدم تثبيت NPM

78
00:05:45,363 --> 00:05:50,937
واسم وحدة Node والتي سيتم تضمينها

79
00:05:50,937 --> 00:05:57,010
في تطبيق Node الخاص بنا في مجلد باسم مجلد node_modules.

80
00:05:57,010 --> 00:06:05,000
وسوف نواجه وحدات العقدة الخارجية في درس لاحق في هذه الدورة.

81
00:06:05,000 --> 00:06:07,630
كيف يمكننا الاستفادة من وحدات العقدة؟

82
00:06:07,630 --> 00:06:13,720
عندما تحتاج إلى استخدام وحدة نمطية عقدة داخل ملف عقدة آخر داخل التطبيق الخاص بك،

83
00:06:13,720 --> 00:06:16,960
ثم يمكنك استخدام وظيفة تتطلب.

84
00:06:16,960 --> 00:06:21,180
ذكرت بإيجاز عن وظيفة تتطلب في واحدة من

85
00:06:21,180 --> 00:06:22,440
الشرائح السابقة هناك.

86
00:06:22,440 --> 00:06:26,420
تتطلب وظيفة وحدات العقدة المستندة إلى الملف،

87
00:06:26,420 --> 00:06:29,073
سوف تحدد هذا حسب الحاجة

88
00:06:29,073 --> 00:06:33,955
ثم حدد المسار إلى الملف الذي يحتوي على وحدة العقدة.

89
00:06:33,955 --> 00:06:39,560
لذلك يمكنك أن تقول require./، اسم الوحدة النمطية إذا كان الملف موجودًا

90
00:06:39,560 --> 00:06:45,590
في المجلد الحالي المكتوب الذي يوجد فيه تطبيق Node الخاص بك.

91
00:06:45,590 --> 00:06:51,060
لذلك يحدد هذا المسار النسبي للملف من الموقع الحالي.

92
00:06:51,060 --> 00:06:54,247
وأيضا بالنسبة للوحدات الأساسية والخارجية،

93
00:06:54,247 --> 00:07:00,260
كنت عادة تحديدها عن طريق القول تتطلب واسم الوحدة.

94
00:07:00,260 --> 00:07:03,090
يمكنك تحديد مسار له بشكل صريح.

95
00:07:03,090 --> 00:07:06,200
إذا كانت وحدة نمطية أساسية، فهي بالفعل جزء من العقدة وبالتالي

96
00:07:06,200 --> 00:07:08,120
سيتم تضمينها تلقائيًا.

97
00:07:08,120 --> 00:07:13,365
إذا كانت وحدة نمطية خارجية، فسيتم تثبيتها إما داخل

98
00:07:13,365 --> 00:07:18,978
مجلد node_modules في المجلد الحالي، أو إذا لم

99
00:07:18,978 --> 00:07:25,327
تجد العقدة الوحدة النمطية الخارجية داخل المجلد node_modules في المجلد الحالي،

100
00:07:25,327 --> 00:07:31,058
فسوف ترتفع إلى المجلد الأعلى التالي يبحث عن وحدة العقدة.

101
00:07:31,058 --> 00:07:33,989
أو مجلد المستوى الأعلى التالي

102
00:07:33,989 --> 00:07:39,143
وفوق التسلسل الهرمي حتى يحدد موقع وحدات العقدة التي

103
00:07:39,143 --> 00:07:44,390
سيتم استيرادها بعد ذلك لاستخدامها داخل تطبيق عقدة الخاص بك.

104
00:07:44,390 --> 00:07:48,040
إذا لم تتمكن من العثور على وحدة العقدة في التسلسل الهرمي،

105
00:07:48,040 --> 00:07:52,640
فمن الواضح أنه سيثير خطأ يقول أن وحدة العقدة مفقودة.

106
00:07:52,640 --> 00:07:57,690
هذه الطريقة في التنظيم مفيدة للغاية في الطريقة

107
00:07:57,690 --> 00:08:03,220
التي يتم بها تعريف بنية تطبيق العقدة حيث سنواجه

108
00:08:04,840 --> 00:08:08,460
المزيد في الجزء الأخير من هذه الدورة.

109
00:08:08,460 --> 00:08:13,530
مع هذه المقدمة السريعة لوحدات العقدة، دعونا نلقي نظرة على مثال

110
00:08:13,530 --> 00:08:19,150
سنقوم به كجزء من التمرين الذي يلي هذه المحاضرة.

111
00:08:19,150 --> 00:08:23,210
كما تعلمنا في هذه المحاضرة،

112
00:08:23,210 --> 00:08:28,040
يتم تعريف حدود الوحدة النمطية للعقدة بواسطة الملف الذي يحتوي على الشفرة هنا.

113
00:08:28,040 --> 00:08:34,060
حتى هنا، لدي مثال على وحدة عقدة المعرفة باسم rectangle.js.

114
00:08:34,060 --> 00:08:38,113
وهناك يمكنك أن ترى أن أنا باستخدام اثنين من الصادرات هنا،

115
00:08:38,113 --> 00:08:42,096
وأنا أقول exports.perifeter و exports.area.

116
00:08:42,096 --> 00:08:47,401
وسترى أنني هنا لا أستخدم module.exports لأن

117
00:08:47,401 --> 00:08:52,740
الصادرات نفسها هي أيضًا نسخة مختصرة من module.exports.

118
00:08:52,740 --> 00:08:57,057
لذلك إذا كنت لا ترغب في استخدام module.exports بالكامل ولكن

119
00:08:57,057 --> 00:09:01,804
بدلاً من ذلك تريد فقط التصدير، فهذه طريقة أخرى لكتابة

120
00:09:01,804 --> 00:09:06,316
تلك العناصر التي يتم تصديرها من وحدات العقدة الحالية.

121
00:09:06,316 --> 00:09:09,875
حتى هنا نحن تصدير وظيفتين، محيط

122
00:09:09,875 --> 00:09:12,750
والمنطقة من وحدة عقدة المستطيل.

123
00:09:12,750 --> 00:09:17,679
الآن من أجل الاستفادة من هذه الوحدة في ملف آخر،

124
00:09:17,679 --> 00:09:21,870
ثم دعونا نلقي نظرة على ملف index.js.

125
00:09:21,870 --> 00:09:27,240
والسطر الأول في هذا الملف ستلاحظ أنه يقول

126
00:09:27,240 --> 00:09:32,220
var rect = تتطلب وداخل علامات الاقتباس،. /مستطيل.

127
00:09:32,220 --> 00:09:36,650
لذلك هذا هو تحديد أن وحدة المستطيل ستكون مهمة هنا،

128
00:09:36,650 --> 00:09:42,090
لقد استخدمت داخل هذا الملف معين من التطبيق.

129
00:09:42,090 --> 00:09:45,670
إذن هذه هي الطريقة التي نحدد بها وحدات العقدة،

130
00:09:45,670 --> 00:09:50,080
وهذا مثال على وحدة العقدة المستندة إلى الملف.

131
00:09:50,080 --> 00:09:52,197
سنواجه

132
00:09:52,197 --> 00:09:56,438
وحدات العقدة الأساسية والخارجية في دروس لاحقة من هذه الدورة.

133
00:09:56,438 --> 00:10:02,669
[ موسيقى]