Explained Node Package Manager by Directing a Movie

通过导演一部电影来解释 Node Package Manager

软件包 = 演员

程就像拍摄一部电影,你可以亲自设计和管理演员,也可以雇佣他人设计好的演员,NPM🔗 就像一个平台,可以在上面找到许多现成的演员,这些演员就是软件包(Package)。平台上的大多数软件包都是免费开源的,能够帮助项目快速高效地实现所需功能。

在现代分工明确的环境下,演员背后通常有一个完整的团队在支撑,比如化妆师、发型师、经纪人等,这些人可以被称为项目的依赖(Dependency)。当你雇佣一位演员时,NPM 也会顺带将演员所需的整个团队成员找来,毕竟要让一个演员发挥作用,实际上需要整个团队的支持。

这样来看,开发软件是否就像培养一位演员呢?没错,你开发的软件也可以发布到 NPM 上,供世界各地的人使用。

Terminal window
npm init

下载 Node.js + NPM🔗 并执行 init 命令,开始寻找你想使用的软件包吧!

node_moduels = 演员休息室

要将一个新的软件包添加到项目中,只需在终端中运行 npm install 包名NPM 就会自动为你下载并安装到项目中。具体来说,本地项目中的所有软件包都会被放入 node_moduels 文件夹中。以下是安装 React 包的示例:

Terminal window
# 安装 React 包
npm install react

也可以将该软件包移除,就像解雇演员一样:

Terminal window
# 移除 React 包
npm uninstall react

package.json = 演员名册

拍电影时,导演会有一本「演员名册」,而使用 NPM 的项目也会有类似的文件,记录项目名称、版本和依赖的软件包。package.json 中的 dependencies 字段就记录了整个项目中使用的软件包:

{
"name": "my-project",
"version": "1.0.0",
"dependencies": {
"react": "^17.0.2"
}
}

package-lock.json = 超详细的演员名单

虽然 package.json 已经记录了项目的依赖,但它记录的版本号是「概略」的,并没有记录依赖项的依赖项版本。由于软件更新迭代时常会出现与旧版本不兼容的问题,因此需要 package-lock.json 来详细记录软件包的:

  1. 精确版本号
  2. 下载地址
  3. 哈希值
  4. 被哪个库所依赖

这个文件在每次更新软件包时都会重新生成,所以不需要手动编辑它。在必要时,可以删除该文件让 NPM 重新生成。

dependencies vs devDependencies 就像舞台上的演员和幕后工作人员

前面提到的都是项目的依赖,但 devDependencies 是什么?想象一下,你的项目中并不一定在生产环境中使用的软件包,比如预处理、打包、测试等工作。这些仅在开发时使用的软件包可以归类到 devDependencies 中。就像舞台上的演员和幕后工作人员,他们都是项目的依赖,但在不同的场合才会使用。

{
"devDependencies": {
"webpack": "^5.38.1"
}
}

参考资料