﻿1
00:00:01,260 --> 00:00:02,200
‫In this lecture,

2
00:00:02,200 --> 00:00:03,783
‫we're going to talk about a bunch of

3
00:00:03,783 --> 00:00:05,980
‫more stuff that you should know

4
00:00:05,980 --> 00:00:08,630
‫about working with npm packages,

5
00:00:08,630 --> 00:00:13,610
‫such as versioning, updating, or deleting packages,

6
00:00:13,610 --> 00:00:17,043
‫and also some other stuff, so let's get started.

7
00:00:18,860 --> 00:00:20,670
‫The first thing that I want to talk about

8
00:00:20,670 --> 00:00:25,670
‫in this video is these version numbers of our packages.

9
00:00:26,000 --> 00:00:28,110
‫Most of the packages on npm

10
00:00:28,110 --> 00:00:31,510
‫follow the so-called semantic version notation,

11
00:00:31,510 --> 00:00:34,140
‫which means that their versions numbers

12
00:00:34,140 --> 00:00:36,913
‫is always expressed with these three numbers.

13
00:00:38,010 --> 00:00:41,000
‫The first one here is called the major version.

14
00:00:41,000 --> 00:00:44,190
‫The second one is called the minor version.

15
00:00:44,190 --> 00:00:47,460
‫The third one is called the patch version.

16
00:00:47,460 --> 00:00:51,604
‫There's actually a meaning in these three numbers.

17
00:00:51,604 --> 00:00:55,160
‫The patch version, which is just this last one here,

18
00:00:55,160 --> 00:00:58,080
‫is only intended to fix bugs.

19
00:00:58,080 --> 00:01:01,750
‫Let's say that in version 1.18,

20
00:01:01,750 --> 00:01:04,150
‫the developers found a bug and so

21
00:01:04,150 --> 00:01:08,663
‫they fixed that bug and then released 1.18.1.

22
00:01:09,860 --> 00:01:11,320
‫Then they found another bug

23
00:01:11,320 --> 00:01:14,840
‫and then they released 1.18.2

24
00:01:14,840 --> 00:01:18,843
‫and so on and so forth until they reached 1.18.11,

25
00:01:20,350 --> 00:01:22,203
‫which is the current version number.

26
00:01:23,450 --> 00:01:27,140
‫Again, this last one here is just for bug fixes.

27
00:01:27,140 --> 00:01:31,040
‫Then after that, we have the minor version.

28
00:01:31,040 --> 00:01:32,670
‫The minor version introduces

29
00:01:32,670 --> 00:01:35,130
‫some new features into the package,

30
00:01:35,130 --> 00:01:38,170
‫but it does not include breaking changes.

31
00:01:38,170 --> 00:01:41,270
‫All the changes that are done in a new version number

32
00:01:41,270 --> 00:01:43,593
‫will always be backward-compatible.

33
00:01:44,751 --> 00:01:47,410
‫If one day the nodemon team, for example,

34
00:01:47,410 --> 00:01:51,290
‫decides to release version 1.19,

35
00:01:51,290 --> 00:01:54,110
‫well, that will then include some new features

36
00:01:54,110 --> 00:01:56,570
‫but it will not break our code.

37
00:01:56,570 --> 00:01:59,750
‫And the same of course happens with this one here.

38
00:01:59,750 --> 00:02:03,230
‫So if some day, there is Slugify 1.4,

39
00:02:03,230 --> 00:02:06,190
‫well then our code is still going to work the same.

40
00:02:06,190 --> 00:02:08,320
‫There will not be any breaking changes.

41
00:02:08,320 --> 00:02:10,600
‫Simply there will be something new,

42
00:02:10,600 --> 00:02:14,947
‫so some new features, which are not just bug fixes.

43
00:02:14,947 --> 00:02:17,940
‫Bug fixes again are for the third,

44
00:02:17,940 --> 00:02:19,850
‫so for the patch version,

45
00:02:19,850 --> 00:02:23,870
‫and then minor new features are for the minor version.

46
00:02:23,870 --> 00:02:26,620
‫Then of course, we have the major version,

47
00:02:26,620 --> 00:02:28,840
‫which is only bumped up whenever it is

48
00:02:28,840 --> 00:02:33,140
‫a huge new release which can have breaking changes.

49
00:02:33,140 --> 00:02:36,500
‫For example, if Slugify 2 comes along.

50
00:02:36,500 --> 00:02:39,000
‫Well our code might no longer work

51
00:02:39,000 --> 00:02:42,130
‫because the slugify function that we have here

52
00:02:42,130 --> 00:02:44,856
‫for example, might have changed its name

53
00:02:44,856 --> 00:02:48,940
‫or maybe the parameter that it expects here are different

54
00:02:48,940 --> 00:02:51,240
‫or the options might have changed,

55
00:02:51,240 --> 00:02:53,210
‫or something might have changed

56
00:02:53,210 --> 00:02:55,123
‫that will break previous version.

57
00:02:57,040 --> 00:02:59,720
‫Be aware that when there is a new version,

58
00:02:59,720 --> 00:03:02,020
‫it might usually affect

59
00:03:02,020 --> 00:03:03,570
‫the code that you already have.

60
00:03:05,030 --> 00:03:07,300
‫Because of that, it is also important

61
00:03:07,300 --> 00:03:09,823
‫to talk about updating packages.

62
00:03:10,670 --> 00:03:12,620
‫In our package.json file,

63
00:03:12,620 --> 00:03:15,258
‫this small symbol here that comes in front

64
00:03:15,258 --> 00:03:18,460
‫of the version number is what specifies

65
00:03:18,460 --> 00:03:22,363
‫which updates we accept for each of the packages.

66
00:03:23,290 --> 00:03:27,430
‫This symbol here, which npm specifies here by default

67
00:03:27,430 --> 00:03:31,900
‫means that we accept patch and minor releases.

68
00:03:31,900 --> 00:03:34,890
‫Now, how do we actually update packages?

69
00:03:34,890 --> 00:03:39,080
‫Well, let's actually quit this process here.

70
00:03:39,080 --> 00:03:40,580
‫The first thing that we can do

71
00:03:40,580 --> 00:03:44,120
‫is to check if there are any outdated packages.

72
00:03:44,120 --> 00:03:49,120
‫We write npm outdated, and that should then give us

73
00:03:49,720 --> 00:03:51,530
‫actually a table with all

74
00:03:51,530 --> 00:03:53,125
‫the packages that are outdated.

75
00:03:53,125 --> 00:03:55,970
‫Well right now, they're all up-to-date,

76
00:03:55,970 --> 00:03:57,860
‫so that didn't really happen.

77
00:03:57,860 --> 00:03:59,021
‫What I want to show you now

78
00:03:59,021 --> 00:04:01,550
‫is that we can actually install

79
00:04:01,550 --> 00:04:05,240
‫a certain package with a certain version number.

80
00:04:05,240 --> 00:04:06,945
‫Let's do that with the Slugify

81
00:04:06,945 --> 00:04:11,003
‫and install it at version 1.0.0.

82
00:04:13,980 --> 00:04:18,980
‫Npm install slugify and then at 1.0.0.

83
00:04:22,220 --> 00:04:23,233
‫Let's try that out.

84
00:04:25,645 --> 00:04:29,560
‫Now indeed, we have one zero zero.

85
00:04:29,560 --> 00:04:31,740
‫When we hover it, it actually says

86
00:04:31,740 --> 00:04:35,773
‫latest version 1.3.4, which is what we had.

87
00:04:36,660 --> 00:04:40,630
‫But if we now run npm outdated,

88
00:04:40,630 --> 00:04:43,390
‫it should then give us that.

89
00:04:43,390 --> 00:04:46,360
‫We see that current is 1.0.0.

90
00:04:46,360 --> 00:04:50,642
‫Wanted is 1.3.4, because that is the one that we accept

91
00:04:50,642 --> 00:04:53,060
‫because remember, that with this here,

92
00:04:53,060 --> 00:04:56,820
‫we accept all the patch and all the minor releases,

93
00:04:56,820 --> 00:04:59,821
‫but of course, we can also change that.

94
00:04:59,821 --> 00:05:04,580
‫For example, we can set it to this symbol here.

95
00:05:04,580 --> 00:05:07,860
‫This will then only accept patch releases.

96
00:05:07,860 --> 00:05:09,483
‫This one is a bit safer.

97
00:05:10,960 --> 00:05:13,570
‫If we run npm outdated now again,

98
00:05:13,570 --> 00:05:14,693
‫let's see what we get.

99
00:05:15,590 --> 00:05:19,150
‫Now the wanted is only 1.0.2,

100
00:05:19,150 --> 00:05:22,690
‫because again, we only accept minor versions.

101
00:05:22,690 --> 00:05:26,090
‫So 1.3.4 is not accepted by us

102
00:05:26,090 --> 00:05:28,670
‫because well, we do not accept

103
00:05:28,670 --> 00:05:30,820
‫any of the minor releases,

104
00:05:30,820 --> 00:05:33,670
‫so again, just patch releases.

105
00:05:33,670 --> 00:05:38,670
‫If you were to do npm update slugify now,

106
00:05:41,460 --> 00:05:42,903
‫let's see what we got then.

107
00:05:45,360 --> 00:05:48,440
‫Now we're at 1.0.2.

108
00:05:48,440 --> 00:05:49,537
‫You see that it changed back

109
00:05:49,537 --> 00:05:52,930
‫for my updating configuration here

110
00:05:52,930 --> 00:05:56,360
‫to accept minor and patch releases.

111
00:05:56,360 --> 00:05:58,763
‫Not just the patch releases like we had before.

112
00:06:01,010 --> 00:06:02,820
‫If we're going to run this now again,

113
00:06:02,820 --> 00:06:04,180
‫it should actually bump us up

114
00:06:04,180 --> 00:06:08,163
‫all the way to 1.3.4, like we had before.

115
00:06:09,710 --> 00:06:11,343
‫Indeed, here we go.

116
00:06:12,550 --> 00:06:16,060
‫All right, that is how we update packages.

117
00:06:16,060 --> 00:06:18,240
‫There are other configurations

118
00:06:18,240 --> 00:06:20,040
‫that we can choose here.

119
00:06:20,040 --> 00:06:23,070
‫We can say, for example, that we want

120
00:06:23,070 --> 00:06:25,970
‫all of the versions, so if at some point,

121
00:06:25,970 --> 00:06:28,790
‫there is a version two and if we didn't update

122
00:06:28,790 --> 00:06:30,930
‫our packages, it will then automatically

123
00:06:30,930 --> 00:06:33,633
‫bump our version up to version two.

124
00:06:34,590 --> 00:06:36,903
‫This one includes all the versions,

125
00:06:38,259 --> 00:06:40,880
‫even ones with breaking changes.

126
00:06:40,880 --> 00:06:43,530
‫But that's not a good idea usually,

127
00:06:43,530 --> 00:06:46,330
‫and so I usually just go with this one

128
00:06:46,330 --> 00:06:49,510
‫that is default, or sometimes even this one here

129
00:06:49,510 --> 00:06:52,740
‫because at some point, even if a minor release

130
00:06:52,740 --> 00:06:54,880
‫should simply introduce new features

131
00:06:54,880 --> 00:06:57,690
‫but no breaking changes, we know that sometimes

132
00:06:57,690 --> 00:07:00,490
‫there can be bugs that developers do not found,

133
00:07:00,490 --> 00:07:02,270
‫and then these bugs, they find their way

134
00:07:02,270 --> 00:07:05,010
‫into our code and might break our code.

135
00:07:05,010 --> 00:07:07,600
‫We do not want that, of course.

136
00:07:07,600 --> 00:07:09,700
‫The safest version is to just

137
00:07:09,700 --> 00:07:12,149
‫use this one for bug fixes.

138
00:07:12,149 --> 00:07:15,510
‫Let's actually just keep it like this here,

139
00:07:15,510 --> 00:07:17,783
‫just for demonstration purposes.

140
00:07:19,183 --> 00:07:20,950
‫This is what you need to know about

141
00:07:20,950 --> 00:07:23,123
‫version numbers and updating.

142
00:07:24,030 --> 00:07:26,443
‫But we can of course also delete packages.

143
00:07:27,350 --> 00:07:30,493
‫Let's now go ahead and install Express,

144
00:07:36,280 --> 00:07:40,140
‫so that we can then go ahead and delete it after that.

145
00:07:40,140 --> 00:07:43,000
‫I'm sure that you can guess how we can do that.

146
00:07:43,000 --> 00:07:44,960
‫That is very easy.

147
00:07:44,960 --> 00:07:49,620
‫Npm uninstall, so it's actually not called delete.

148
00:07:49,620 --> 00:07:51,510
‫It's really uninstalling.

149
00:07:51,510 --> 00:07:56,303
‫We install and we uninstall Express.

150
00:07:58,170 --> 00:08:00,460
‫That will then delete it from

151
00:08:00,460 --> 00:08:02,941
‫our node modules folder, and also from

152
00:08:02,941 --> 00:08:05,960
‫our dependencies in a package.json file.

153
00:08:06,920 --> 00:08:11,000
‫Each time we decide not to use a module anymore,

154
00:08:11,000 --> 00:08:14,140
‫well, we should always go ahead and remove it,

155
00:08:14,140 --> 00:08:15,983
‫or actually uninstall it.

156
00:08:16,900 --> 00:08:19,450
‫Now as a final thing, I want to talk a little bit

157
00:08:19,450 --> 00:08:22,240
‫about the node modules folder.

158
00:08:22,240 --> 00:08:24,010
‫This folder, which contains all

159
00:08:24,010 --> 00:08:26,600
‫the dependencies of our project.

160
00:08:26,600 --> 00:08:29,210
‫Let's say that you want to share your code

161
00:08:29,210 --> 00:08:31,393
‫with someone, or that you, for example,

162
00:08:31,393 --> 00:08:33,550
‫want to start working on one computer

163
00:08:33,550 --> 00:08:35,850
‫and then move to the next one.

164
00:08:35,850 --> 00:08:39,140
‫You will never share this node modules folder

165
00:08:39,140 --> 00:08:42,330
‫because this code, you can easily get it from npm.

166
00:08:42,330 --> 00:08:44,570
‫There's no need to go ahead and copy

167
00:08:44,570 --> 00:08:46,760
‫all of this code here, for example,

168
00:08:46,760 --> 00:08:50,730
‫to a GitHub repository or to a Dropbox folder,

169
00:08:50,730 --> 00:08:54,040
‫or really somewhere that you want to share your code,

170
00:08:54,040 --> 00:08:56,000
‫because this folder here as you see

171
00:08:56,000 --> 00:08:58,616
‫has tons of folders and each of them

172
00:08:58,616 --> 00:09:01,670
‫might have tons of files.

173
00:09:01,670 --> 00:09:03,670
‫All of a sudden, you might end up with

174
00:09:03,670 --> 00:09:06,313
‫tens or hundreds of thousands of files.

175
00:09:07,718 --> 00:09:09,860
‫You should never share this folder

176
00:09:09,860 --> 00:09:13,173
‫and never check it out into your GitHub repository.

177
00:09:14,680 --> 00:09:17,620
‫Let's say that you uploaded this code

178
00:09:17,620 --> 00:09:21,173
‫to your GitHub account without this node modules,

179
00:09:22,580 --> 00:09:25,020
‫or you put it into a Dropbox on one computer

180
00:09:25,020 --> 00:09:27,660
‫and downloaded it at the other one.

181
00:09:27,660 --> 00:09:30,464
‫Let's say we now downloaded this code here,

182
00:09:30,464 --> 00:09:32,780
‫so without node modules.

183
00:09:32,780 --> 00:09:34,540
‫So we delete that one now

184
00:09:36,050 --> 00:09:38,523
‫and end up with just a regular project folder.

185
00:09:39,720 --> 00:09:42,092
‫How do we now get back our dependencies

186
00:09:42,092 --> 00:09:44,180
‫or our node modules folder?

187
00:09:44,180 --> 00:09:46,120
‫Well, it's very easy.

188
00:09:46,120 --> 00:09:48,503
‫All we have to do is npm install.

189
00:09:55,490 --> 00:09:58,950
‫What it did is to read our package.json file,

190
00:09:58,950 --> 00:10:02,030
‫read our dependencies, and then download everything

191
00:10:02,030 --> 00:10:05,860
‫back into this folder, all right.

192
00:10:05,860 --> 00:10:07,940
‫Now one important piece of this puzzle

193
00:10:07,940 --> 00:10:10,503
‫is the package-lock.json file.

194
00:10:12,290 --> 00:10:15,070
‫If we open that up, we get a list of

195
00:10:15,070 --> 00:10:17,710
‫all the versions of all the packages

196
00:10:17,710 --> 00:10:19,210
‫that we're actually using.

197
00:10:19,210 --> 00:10:22,093
‫That includes the dependencies of our dependencies.

198
00:10:23,100 --> 00:10:25,373
‫Let's go to Slugify, for example.

199
00:10:28,030 --> 00:10:29,910
‫Slugify, and so here we see that

200
00:10:29,910 --> 00:10:31,413
‫we're using version 1.3.4.

201
00:10:33,270 --> 00:10:35,600
‫That is very important because

202
00:10:35,600 --> 00:10:38,420
‫if you share your code, you want the other developer

203
00:10:38,420 --> 00:10:40,190
‫or even yourself to be using

204
00:10:40,190 --> 00:10:42,450
‫the exact same package versions,

205
00:10:42,450 --> 00:10:45,760
‫so that your code works the exact same way for you

206
00:10:45,760 --> 00:10:47,300
‫and for the other developer.

207
00:10:47,300 --> 00:10:50,200
‫For that, the exact version numbers

208
00:10:50,200 --> 00:10:52,380
‫are basically set in stone

209
00:10:52,380 --> 00:10:54,833
‫in this package-lock.json file.

210
00:10:56,624 --> 00:10:58,850
‫If you share your code, no matter if you're using

211
00:10:58,850 --> 00:11:02,180
‫GitHub or Dropbox or something like that,

212
00:11:02,180 --> 00:11:04,690
‫always share your package.json file

213
00:11:04,690 --> 00:11:07,660
‫and the package-lock.json file

214
00:11:07,660 --> 00:11:09,690
‫because these two files are necessary

215
00:11:09,690 --> 00:11:12,460
‫for the other developer to then reconstruct

216
00:11:12,460 --> 00:11:15,143
‫basically the node modules folder.

217
00:11:18,232 --> 00:11:20,860
‫Yeah, I think that's all you need to know

218
00:11:20,860 --> 00:11:23,600
‫about package versions, updating,

219
00:11:23,600 --> 00:11:28,230
‫uninstalling, and also sharing code with npm,

220
00:11:28,230 --> 00:11:31,710
‫package.json and package-lock.json.

221
00:11:31,710 --> 00:11:33,870
‫If there's anything more that you want to know,

222
00:11:33,870 --> 00:11:37,320
‫you can again always ask in the course Q and A

223
00:11:37,320 --> 00:11:39,323
‫and then you'll get help there.

