软件包 = 演员
程就像拍摄一部电影,你可以亲自设计和管理演员,也可以雇佣他人设计好的演员,NPM 就像一个平台,可以在上面找到许多现成的演员,这些演员就是软件包(Package)。平台上的大多数软件包都是免费开源的,能够帮助项目快速高效地实现所需功能。
在现代分工明确的环境下,演员背后通常有一个完整的团队在支撑,比如化妆师、发型师、经纪人等,这些人可以被称为项目的依赖(Dependency)。当你雇佣一位演员时,NPM 也会顺带将演员所需的整个团队成员找来,毕竟要让一个演员发挥作用,实际上需要整个团队的支持。
这样来看,开发软件是否就像培养一位演员呢?没错,你开发的软件也可以发布到 NPM 上,供世界各地的人使用。
npm init
下载 Node.js + NPM 并执行 init 命令,开始寻找你想使用的软件包吧!
node_moduels
= 演员休息室
要将一个新的软件包添加到项目中,只需在终端中运行 npm install 包名
NPM 就会自动为你下载并安装到项目中。具体来说,本地项目中的所有软件包都会被放入 node_moduels
文件夹中。以下是安装 React 包的示例:
# 安装 React 包npm install react
也可以将该软件包移除,就像解雇演员一样:
# 移除 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
来详细记录软件包的:
- 精确版本号
- 下载地址
- 哈希值
- 被哪个库所依赖
这个文件在每次更新软件包时都会重新生成,所以不需要手动编辑它。在必要时,可以删除该文件让 NPM 重新生成。
dependencies vs devDependencies 就像舞台上的演员和幕后工作人员
前面提到的都是项目的依赖,但 devDependencies
是什么?想象一下,你的项目中并不一定在生产环境中使用的软件包,比如预处理、打包、测试等工作。这些仅在开发时使用的软件包可以归类到 devDependencies
中。就像舞台上的演员和幕后工作人员,他们都是项目的依赖,但在不同的场合才会使用。
{ "devDependencies": { "webpack": "^5.38.1" }}