Dark Dwarf Blog background

npm 包管理器

npm 包管理器

1. npm 相关概念

npm 是 JavaScript 包管理器 (Package Manager)。它主要由两部分组成:

  1. 一个在线仓库 (Registry):一个巨大的、公开的数据库,存储了海量的、可重用的 JavaScript 代码包(Packages)。这些包可以是小型的辅助函数库(如 lodash),也可以是完整的前端框架(如 React, Vue)。
  2. 一个命令行工具 (CLI):一个安装在开发者电脑上的工具,用于与在线仓库进行交互,实现包的搜索、安装、更新和卸载等操作。

2. package.json:项目的身份证

每个使用 npm 的项目都有一个核心文件:package.json。它是一个 JSON 格式的文本文件,是项目的“身份证”和“说明书”。它定义了如下内容:

  • 项目元数据:记录项目的名称、版本、描述、作者等基本信息。
  • 依赖清单:列出项目运行和开发所需要的所有第三方包及其版本号。
  • 脚本快捷方式:定义一些常用的命令,如启动、测试、打包等,通过 npm run <script-name> 来执行。

package.json 使得项目变得可移植和可复现。任何人只要获取了你的项目代码(其中包含 package.json),然后运行 npm install,就能自动下载所有必需的依赖,确保开发环境的一致性。

b.b. 创建 package.json 文件

在你的项目根目录下,运行以下命令来交互式地创建一个 package.json 文件:

npm init

如果想快速生成一个包含默认值的 package.json,可以使用 -y 标志:

npm init -y

c.c. 核心字段解析

一个典型的 package.json 文件如下所示:

{
  "name": "my-awesome-app",
  "version": "1.0.0",
  "description": "A brief description of my awesome app.",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  },
  "dependencies": {
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "jest": "^29.7.0"
  },
  "author": "Your Name",
  "license": "ISC"
}
  • name: 项目名称,必须是小写字母和短横线的组合。
  • version: 项目的当前版本,遵循**语义化版本(SemVer)**规范(主版本号.次版本号.修订号)。
  • description: 项目的简短描述。
  • main: 项目的入口文件,当其他项目 requireimport 这个包时,会默认加载这个文件。
  • scripts: 定义可执行的脚本命令。
  • dependencies: 生产环境依赖。这些是应用程序在生产环境中实际运行所必需的包。
  • devDependencies: 开发环境依赖。这些包只在开发和测试阶段需要,例如代码格式化工具、测试框架、打包工具等。它们不会被打包到最终的生产代码中。

3. 管理依赖

a.a. 安装包

npm 将依赖分为生产依赖和开发依赖:

  • 生产依赖是应用程序在生产环境(即最终用户使用的环境)中运行时所必需的包。如果缺少了这些依赖,你的应用会立刻崩溃或无法启动。
  • 开发依赖是只在本地开发和构建过程中使用的包。它们不是应用运行所必需的。

安装生产依赖的方法如下:

# 安装 lodash 并将其添加到 dependencies
npm install lodash
# 简写
npm i lodash

安装开发依赖的方法如下:

# 安装 jest 并将其添加到 devDependencies
npm install jest --save-dev
# 简写
npm i jest -D

当从 Git 等地方克隆一个新项目后,进入项目目录,可运行如下命令来安装 package.json 中列出的所有依赖:

npm install

b.b. node_modulespackage-lock.json

在安装包的过程中,项目中会出现两个重要的部分:

  • node_modules 目录:所有已安装包的实际代码都存放在这个文件夹里。这个目录通常非常庞大,永远不要将它提交到版本控制系统中,应将其添加到 .gitignore 文件里。

  • package-lock.json 文件:这个文件会自动生成,它精确地记录了 node_modules 目录中每个包的确切版本号、下载地址以及它们的依赖关系树。它的作用是锁定依赖版本,确保团队中每个成员以及服务器在执行 npm install 时,都能生成完全相同的 node_modules 结构,避免“在我机器上能跑”的问题。这个文件应该被提交到版本控制系统中

c.c. 其他常用命令

  • 卸载包
npm uninstall lodash
  • 更新包
# 将 lodash 更新到 package.json 中指定的最新兼容版本
npm update lodash
  • 查看过时的包
npm outdated
  • 运行脚本
# 运行 package.json 中 "scripts" 定义的 "test" 命令
npm run test
# 对于 "start" 和 "test" 等常用命令,可以省略 "run"
npm test