﻿1
00:00:01,090 --> 00:00:02,770
‫So what I wanted to show you

2
00:00:02,770 --> 00:00:05,210
‫in this last video about the project

3
00:00:05,210 --> 00:00:08,360
‫is that we can actually create our own module

4
00:00:08,360 --> 00:00:12,137
‫and export something from them like for example a function.

5
00:00:12,137 --> 00:00:16,710
‫Then import this function into another module

6
00:00:16,710 --> 00:00:19,150
‫and then use that function there.

7
00:00:19,150 --> 00:00:22,653
‫Okay, and so that is what we're gonna do in this lecture.

8
00:00:24,490 --> 00:00:26,680
‫So let's say that we actually had

9
00:00:26,680 --> 00:00:28,816
‫a bunch of different JavaScript files

10
00:00:28,816 --> 00:00:32,613
‫in which we used this replace template function.

11
00:00:34,240 --> 00:00:37,710
‫So right now we're just using it here in index.js.

12
00:00:37,710 --> 00:00:41,240
‫We use it twice and that is why we have a function,

13
00:00:41,240 --> 00:00:43,062
‫but imagine if we wanted to use this function

14
00:00:43,062 --> 00:00:44,960
‫in multiple files.

15
00:00:44,960 --> 00:00:48,930
‫Okay, so what we can do is to create a new module

16
00:00:48,930 --> 00:00:50,790
‫and export that function from it

17
00:00:50,790 --> 00:00:53,210
‫and then import it back here.

18
00:00:53,210 --> 00:00:55,330
‫So, the first thing that you need to know

19
00:00:55,330 --> 00:00:56,900
‫is that in Nodejs

20
00:00:56,900 --> 00:01:01,420
‫actually every single file is treated as a module.

21
00:01:01,420 --> 00:01:06,210
‫And so this index.js here actually is also a module,

22
00:01:06,210 --> 00:01:08,780
‫which in this case imports other modules

23
00:01:08,780 --> 00:01:11,663
‫and particularly these three.

24
00:01:13,610 --> 00:01:16,090
‫Let's now create a new folder here,

25
00:01:16,090 --> 00:01:17,800
‫which I'm gonna call modules

26
00:01:20,120 --> 00:01:21,105
‫and then in here

27
00:01:21,105 --> 00:01:23,050
‫I'm gonna create a file

28
00:01:23,050 --> 00:01:26,707
‫which will be our module called replaceTemplate.js.

29
00:01:31,050 --> 00:01:34,793
‫Okay, so let's grab our function here.

30
00:01:37,220 --> 00:01:39,000
‫Actually, cut it out from here

31
00:01:40,730 --> 00:01:42,863
‫and simply paste it here.

32
00:01:44,420 --> 00:01:48,560
‫All right, now how do we actually export this function

33
00:01:48,560 --> 00:01:50,350
‫from this module?

34
00:01:50,350 --> 00:01:53,110
‫Well, there are different ways of exporting something

35
00:01:53,110 --> 00:01:54,166
‫from a module

36
00:01:54,166 --> 00:01:56,040
‫and we're gonna talk in depth

37
00:01:56,040 --> 00:01:59,013
‫about all of this in another section later on.

38
00:01:59,013 --> 00:01:59,904
‫But for now

39
00:01:59,904 --> 00:02:04,303
‫all we're gonna do is to use module.export.

40
00:02:08,020 --> 00:02:09,000
‫So in each module,

41
00:02:09,000 --> 00:02:12,950
‫we have access to a variable called module

42
00:02:12,950 --> 00:02:16,360
‫and on there we can set the export's property.

43
00:02:16,360 --> 00:02:20,230
‫And that we then set to whatever we wanna export.

44
00:02:20,230 --> 00:02:22,943
‫In this case, that is just this function.

45
00:02:24,130 --> 00:02:25,940
‫So we're gonna get rid of this name

46
00:02:27,660 --> 00:02:28,940
‫and so basically

47
00:02:28,940 --> 00:02:33,940
‫what we're gonna assign to this export property on module

48
00:02:34,151 --> 00:02:36,423
‫is simply this anonymous function.

49
00:02:37,700 --> 00:02:39,050
‫I said anonymous

50
00:02:39,050 --> 00:02:42,110
‫because right now this function does not have a name.

51
00:02:42,110 --> 00:02:44,184
‫And so it's just an anonymous function

52
00:02:44,184 --> 00:02:47,867
‫to be assigned to this export property

53
00:02:47,867 --> 00:02:50,750
‫on the module object.

54
00:02:50,750 --> 00:02:53,500
‫Again, that is an object that we have access to

55
00:02:53,500 --> 00:02:56,820
‫in each and every Nodejs module.

56
00:02:56,820 --> 00:02:58,250
‫And again,

57
00:02:58,250 --> 00:02:59,410
‫later on you will learn

58
00:02:59,410 --> 00:03:02,020
‫how that actually happens behind the scenes.

59
00:03:02,020 --> 00:03:02,853
‫But for now,

60
00:03:02,853 --> 00:03:04,050
‫let's just use it

61
00:03:04,050 --> 00:03:07,070
‫and don't worry about why it works this way.

62
00:03:07,070 --> 00:03:10,750
‫So this exports this function from the module.

63
00:03:10,750 --> 00:03:14,423
‫Let's just go to index.js and import it.

64
00:03:15,510 --> 00:03:19,410
‫And imports usually always happen at the top of the file

65
00:03:19,410 --> 00:03:21,400
‫and after the core modules.

66
00:03:21,400 --> 00:03:23,100
‫First, we have the core modules

67
00:03:23,100 --> 00:03:25,462
‫and then we have our own modules.

68
00:03:25,462 --> 00:03:30,462
‫We will do require and then our own module,

69
00:03:30,890 --> 00:03:32,640
‫which is dot...

70
00:03:32,640 --> 00:03:34,534
‫And remember in the require function,

71
00:03:34,534 --> 00:03:39,534
‫the dot actually means the current location of this module.

72
00:03:39,725 --> 00:03:43,660
‫So remember when we talked about the dir name variable here,

73
00:03:43,660 --> 00:03:48,330
‫which is usually the one that points to the module's folder.

74
00:03:48,330 --> 00:03:50,860
‫But in this case in the require function,

75
00:03:50,860 --> 00:03:52,678
‫remember there is an exception

76
00:03:52,678 --> 00:03:55,567
‫where this dot actually points to the location

77
00:03:55,567 --> 00:03:57,740
‫where this module is in.

78
00:03:57,740 --> 00:03:58,660
‫And so right now,

79
00:03:58,660 --> 00:04:00,960
‫that is this root folder here.

80
00:04:00,960 --> 00:04:04,410
‫And so from here we go to modules

81
00:04:05,660 --> 00:04:09,333
‫and then in there we have replaceTemplate.

82
00:04:12,480 --> 00:04:13,313
‫And again,

83
00:04:13,313 --> 00:04:15,220
‫just as with the other modules,

84
00:04:15,220 --> 00:04:17,193
‫we don't need the .js.

85
00:04:18,670 --> 00:04:22,700
‫Now that is gonna return what we exported here

86
00:04:22,700 --> 00:04:24,929
‫with module.exports.

87
00:04:24,929 --> 00:04:28,321
‫What we have here, this code, this function,

88
00:04:28,321 --> 00:04:33,321
‫is what will be exported from this require function call.

89
00:04:33,370 --> 00:04:35,620
‫And so we can now save that into any variable

90
00:04:35,620 --> 00:04:37,870
‫and give it a name that we want.

91
00:04:37,870 --> 00:04:40,460
‫So we could just call it X if we wanted

92
00:04:40,460 --> 00:04:42,850
‫or really whatever we wanted.

93
00:04:42,850 --> 00:04:45,960
‫But instead I am just giving it this name

94
00:04:45,960 --> 00:04:47,420
‫that we already had here

95
00:04:47,420 --> 00:04:50,670
‫so that I don't have to change my code here.

96
00:04:50,670 --> 00:04:53,770
‫So replaceTemplate is the name

97
00:04:53,770 --> 00:04:56,160
‫that I wanna give to this variable

98
00:04:56,160 --> 00:04:58,040
‫which is now this function.

99
00:04:58,040 --> 00:04:59,580
‫And just like this,

100
00:04:59,580 --> 00:05:01,900
‫we exported something from one module

101
00:05:01,900 --> 00:05:04,203
‫and imported it into another one.

102
00:05:05,689 --> 00:05:09,941
‫And so now if we restart our server,

103
00:05:09,941 --> 00:05:13,900
‫everything should still be working.

104
00:05:13,900 --> 00:05:15,000
‫But it actually does not.

105
00:05:15,000 --> 00:05:18,300
‫We have some kind of error here.

106
00:05:18,300 --> 00:05:20,920
‫And it says it cannot find the module.

107
00:05:20,920 --> 00:05:23,630
‫And that's because I was stupid enough

108
00:05:23,630 --> 00:05:27,150
‫to call this folder here modules.js.

109
00:05:27,150 --> 00:05:28,600
‫I am sorry for that.

110
00:05:28,600 --> 00:05:29,611
‫This one is of course

111
00:05:29,611 --> 00:05:32,363
‫only supposed to be called modules.

112
00:05:34,270 --> 00:05:37,350
‫And that's why it wasn't giving me the auto-complete here.

113
00:05:37,350 --> 00:05:39,194
‫I was wondering why that was.

114
00:05:39,194 --> 00:05:40,973
‫And now we know.

115
00:05:42,100 --> 00:05:43,540
‫If it doesn't work for you,

116
00:05:43,540 --> 00:05:45,119
‫just change the name here of this folder

117
00:05:45,119 --> 00:05:49,413
‫and then everything should match and work as it should.

118
00:05:50,730 --> 00:05:55,730
‫Let's reload and it still replaces everything as it should.

119
00:05:56,160 --> 00:05:57,716
‫The same here of course.

120
00:05:57,716 --> 00:06:02,716
‫And so yeah, we are now done with this project.

121
00:06:03,630 --> 00:06:06,380
‫Congratulations, well done.

122
00:06:06,380 --> 00:06:09,974
‫You are well on your way of learning Nodejs.

123
00:06:09,974 --> 00:06:11,500
‫Now in the rest of the section

124
00:06:11,500 --> 00:06:12,770
‫we're gonna talk a little bit

125
00:06:12,770 --> 00:06:16,510
‫about the node package manager or npm.

126
00:06:16,510 --> 00:06:18,380
‫And so we're gonna keep working a little bit

127
00:06:18,380 --> 00:06:19,770
‫with this project

128
00:06:19,770 --> 00:06:21,786
‫but not really adding any functionality.

129
00:06:21,786 --> 00:06:24,890
‫Anyway, see you in the next video

130
00:06:24,890 --> 00:06:27,973
‫where we're gonna start talking about npm.

