1
00:00:01,170 --> 00:00:03,500
<v Instructor>Besides native ES Modules,</v>

2
00:00:03,500 --> 00:00:05,290
and the module pattern,

3
00:00:05,290 --> 00:00:07,610
there are also other module systems,

4
00:00:07,610 --> 00:00:08,650
that have been used

5
00:00:08,650 --> 00:00:11,150
by JavaScript in the past.

6
00:00:11,150 --> 00:00:14,440
But again, they were not native JavaScript.

7
00:00:14,440 --> 00:00:18,290
so they relied on some external implementations.

8
00:00:18,290 --> 00:00:19,830
And two examples are:

9
00:00:19,830 --> 00:00:21,350
AMD Modules,

10
00:00:21,350 --> 00:00:23,850
and CommonJS modules.

11
00:00:23,850 --> 00:00:26,320
And in fact, CommonJS modules,

12
00:00:26,320 --> 00:00:28,400
are worth taking a look at.

13
00:00:28,400 --> 00:00:29,963
And so let's do that now.

14
00:00:31,490 --> 00:00:34,594
Now CommonJS modules are important for us,

15
00:00:34,594 --> 00:00:37,540
because they have been used in Node.js,

16
00:00:37,540 --> 00:00:40,430
for almost all of its existence.

17
00:00:40,430 --> 00:00:42,520
So only very recently,

18
00:00:42,520 --> 00:00:45,150
ES Modules have actually been implemented,

19
00:00:45,150 --> 00:00:46,870
in Node.js.

20
00:00:46,870 --> 00:00:47,703
And remember,

21
00:00:47,703 --> 00:00:49,200
Node.js is a way

22
00:00:49,200 --> 00:00:51,830
of running JavaScript on a web server,

23
00:00:51,830 --> 00:00:54,210
outside of a browser.

24
00:00:54,210 --> 00:00:56,520
Now the big consequence of this,

25
00:00:56,520 --> 00:00:58,550
is that almost all the modules,

26
00:00:58,550 --> 00:01:00,630
in the npm repository,

27
00:01:00,630 --> 00:01:01,610
that we talked about

28
00:01:01,610 --> 00:01:04,720
in the beginning of this section, remember?

29
00:01:04,720 --> 00:01:06,170
So all these modules

30
00:01:06,170 --> 00:01:08,230
that we can use in our own code,

31
00:01:08,230 --> 00:01:11,630
still use the CommonJS module system.

32
00:01:11,630 --> 00:01:12,604
And the reason for that,

33
00:01:12,604 --> 00:01:15,120
is that npm was originally

34
00:01:15,120 --> 00:01:17,460
only intended for node.

35
00:01:17,460 --> 00:01:20,900
Which as they said, uses commonJS.

36
00:01:20,900 --> 00:01:24,400
Only later npm became the standard repository,

37
00:01:24,400 --> 00:01:26,750
for the whole JavaScript world.

38
00:01:26,750 --> 00:01:29,610
And so now we are basically stuck,

39
00:01:29,610 --> 00:01:31,400
with CommonJS.

40
00:01:31,400 --> 00:01:32,810
And so therefore,

41
00:01:32,810 --> 00:01:34,270
you will see probably,

42
00:01:34,270 --> 00:01:37,230
a lot of CommonJS still around.

43
00:01:37,230 --> 00:01:38,740
And so let's take a quick second

44
00:01:38,740 --> 00:01:40,970
to see what it looks like.

45
00:01:40,970 --> 00:01:42,340
So let's just pretend

46
00:01:42,340 --> 00:01:43,450
that we want to export

47
00:01:43,450 --> 00:01:45,680
something from this module.

48
00:01:45,680 --> 00:01:47,380
And so let's get,

49
00:01:47,380 --> 00:01:48,823
a disfunction here again,

50
00:01:50,150 --> 00:01:51,713
like this.

51
00:01:52,930 --> 00:01:54,320
All right?

52
00:01:54,320 --> 00:01:57,470
And so just like ES6 modules,

53
00:01:57,470 --> 00:01:58,550
in CommonJS,

54
00:01:58,550 --> 00:02:00,623
one file, is one module.

55
00:02:02,136 --> 00:02:04,720
And we export something from a module,

56
00:02:04,720 --> 00:02:07,530
using export.dot,

57
00:02:07,530 --> 00:02:09,273
and then the name of the export.

58
00:02:12,840 --> 00:02:13,970
So let's say,

59
00:02:13,970 --> 00:02:15,170
export.dot (indistinct),

60
00:02:16,337 --> 00:02:17,810
and then,

61
00:02:17,810 --> 00:02:20,330
whatever we want to export there.

62
00:02:20,330 --> 00:02:21,620
Now of course,

63
00:02:21,620 --> 00:02:23,870
this is not going to work in the browser,

64
00:02:23,870 --> 00:02:26,163
but it would work in Node.js.

65
00:02:27,970 --> 00:02:29,810
So this export keyword here,

66
00:02:29,810 --> 00:02:31,400
is basically an object

67
00:02:31,400 --> 00:02:34,800
that again, is of course not defined here

68
00:02:34,800 --> 00:02:36,060
in our code,

69
00:02:36,060 --> 00:02:38,210
and also not in the browser.

70
00:02:38,210 --> 00:02:39,440
But in Node.js,

71
00:02:39,440 --> 00:02:41,100
it is an important object,

72
00:02:41,100 --> 00:02:42,700
that is used.

73
00:02:42,700 --> 00:02:45,720
Now then to import something,...

74
00:02:45,720 --> 00:02:47,520
And that's just right this here.

75
00:02:47,520 --> 00:02:48,830
So export,

76
00:02:48,830 --> 00:02:49,693
and import.

77
00:02:50,610 --> 00:02:52,690
And so this code is not for you to write.

78
00:02:52,690 --> 00:02:55,120
I just want to show this to you.

79
00:02:55,120 --> 00:02:57,460
So if we didn't want it to import this,

80
00:02:57,460 --> 00:02:59,170
would be pretty similar,

81
00:02:59,170 --> 00:03:01,593
to ES Modules actually,

82
00:03:02,500 --> 00:03:03,610
but then from here,

83
00:03:03,610 --> 00:03:07,060
we will call a require function.

84
00:03:07,060 --> 00:03:08,293
So just like this.

85
00:03:12,660 --> 00:03:13,780
So again, require

86
00:03:13,780 --> 00:03:15,690
is of course not defined,

87
00:03:15,690 --> 00:03:17,870
here in our browser environment,

88
00:03:17,870 --> 00:03:19,980
but it is defined in Node.js,

89
00:03:19,980 --> 00:03:21,230
because this is part

90
00:03:21,230 --> 00:03:23,423
of the CommonJS specification.

91
00:03:27,254 --> 00:03:29,220
And that's actually all I had to show you,

92
00:03:29,220 --> 00:03:30,810
even though this is, of course,

93
00:03:30,810 --> 00:03:33,120
just scratching the surface.

94
00:03:33,120 --> 00:03:34,720
But all I wanted to do here,

95
00:03:34,720 --> 00:03:36,380
is to just let you know,

96
00:03:36,380 --> 00:03:38,620
that there are different module systems,

97
00:03:38,620 --> 00:03:40,010
and that CommonJS,

98
00:03:40,010 --> 00:03:41,800
is particularly important,

99
00:03:41,800 --> 00:03:44,570
in the world of JavaScript.

100
00:03:44,570 --> 00:03:45,870
Now in the long run,

101
00:03:45,870 --> 00:03:47,160
ES6 Modules,

102
00:03:47,160 --> 00:03:48,610
will hopefully,

103
00:03:48,610 --> 00:03:49,760
and probably,

104
00:03:49,760 --> 00:03:52,950
replace all of these different module systems.

105
00:03:52,950 --> 00:03:54,270
But it's still gonna be

106
00:03:54,270 --> 00:03:56,880
a long way until you're there.

107
00:03:56,880 --> 00:03:58,050
And so it's good

108
00:03:58,050 --> 00:03:59,330
that at least you know,

109
00:03:59,330 --> 00:04:00,660
what is (indistinct),

110
00:04:00,660 --> 00:04:02,480
when you stumble upon

111
00:04:02,480 --> 00:04:03,980
the syntax in the future,

112
00:04:03,980 --> 00:04:04,813
in your work.

113
00:04:06,520 --> 00:04:07,353
And with this,

114
00:04:07,353 --> 00:04:08,186
let's move on,

115
00:04:08,186 --> 00:04:10,110
to the rest of the section,

116
00:04:10,110 --> 00:04:11,210
where we will learn

117
00:04:11,210 --> 00:04:14,550
how to use third party packages from npm,

118
00:04:14,550 --> 00:04:17,110
how to bundle all modules together,

119
00:04:17,110 --> 00:04:19,810
and also how to transpile or code back,

120
00:04:19,810 --> 00:04:21,350
to ES 5,

121
00:04:21,350 --> 00:04:22,473
for old browsers.

