npm(Node Package Manager,节点包管理器)是 Node.js 官方内置 的包管理工具,无需单独安装。它是全球最大的 JavaScript 包生态枢纽,负责完成第三方包的搜索、安装、更新、卸载、版本管理等操作。 依托 npm 生态,开发者可以快速复用海量成熟的第三方包,大幅弥补 Node.js 内置模块的不足,极大提升开发效率。
在 Node.js 开发中,第三方模块 统一被称为包(Package)。
包由全球开发者、第三方团队开源开发,免费开源、可直接使用,不属于 Node.js 官方内置模块,也不是自定义模块。
Node.js 内置模块仅提供底层 API,开发复杂功能效率极低; 包是对内置模块的高级封装,提供更简洁、更强大的 API,类比:
浏览器内置 API ↔ jQuery 库
Node.js 内置模块 ↔ 第三方包
使用包可以快速实现时间格式化、网络请求、文件处理等复杂功能,无需从零开发。
npm 拥有全球最大的 JavaScript 包共享平台:
生态规模:超 120 万个开源包,支撑全球开发者使用
npm 伴随 Node.js 自动安装,无需额外配置,打开终端即可直接使用。
安装指定包的完整命令与简写命令:
# 完整命令
npm install 包名称
# 简写命令(推荐)
npm i 包名称实战示例:安装时间格式化包 moment
npm install moment安装完成后,通过 require() 引入包,即可直接调用其 API:
// 引入第三方包
const moment = require('moment');
// 格式化当前时间
const now = moment().format('YYYY-MM-DD HH:mm:ss');
// 输出结果
console.log(now);初次安装包后,项目会自动生成两个核心文件 / 文件夹:
node_modules 文件夹:存放所有已安装的包,require() 加载第三方包时,会从此目录查找
package-lock.json 配置文件:锁定所有包的精确版本、下载地址、依赖关系,保证团队环境一致
重要规范:禁止手动修改
node_modules和package-lock.json,所有操作由 npm 自动维护
默认安装最新版本,使用 @ 符号可指定版本号:
# 安装 moment 2.24.0 版本
npm install moment@2.24.0npm 包遵循语义化版本,格式:主版本号.功能版本号.修复版本号,示例:2.24.0
第 1 位:大版本(不兼容的架构更新)
第 2 位:功能版本(新增功能,向下兼容)
第 3 位:Bug 修复版本(修复问题,无功能变更)
版本号规则:前面数字升级,后面数字归零,如 2.24.0 → 3.0.0
package.json 是项目必备的包管理配置文件,记录项目核心信息与所有依赖包,是团队协作的核心文件。
在团队开发中,直接共享 node_modules 会导致项目体积巨大(占比 99%),传输、协作效率极低。

解决方案:
用 package.json 记录所有依赖包
共享代码时删除 node_modules 文件夹
成员获取代码后,一键重新安装所有依赖
为了轻量化共享项目,必须将依赖包记录在 package.json 中,同时将 node_modules 加入 .gitignore 忽略文件,禁止提交到代码仓库。
在项目根目录、英文路径、无空格下,执行命令一键生成:
npm init -y严格注意:
命令仅支持英文目录,项目名称禁止使用中文、空格、特殊字符
执行
npm install安装包时,npm 会自动将包信息写入package.json
生产依赖
package.json 中的 dependencies 节点,记录项目运行必需的包(开发 + 线上环境都需要)。
{
"name": "hello-nodejs",
"version": "1.0.0",
"dependencies": {
"moment": "^2.30.1"
}
}开发依赖
仅在开发阶段使用、线上环境不需要的包,记录在 devDependencies 中(如构建工具、测试工具)。
安装开发依赖命令:
npm install 包名 --save-dev
# 简写
npm i 包名 -D获取无 node_modules 的项目后,执行以下命令,npm 会自动读取 package.json,下载所有依赖包:
npm install
# 简写
npm i执行成功后,自动生成 node_modules 文件夹,项目即可正常运行。
使用 npm uninstall 卸载指定包,npm 会自动同步更新配置文件:
npm uninstall 包名卸载效果:
从 node_modules 中删除包文件
从 package.json 中移除依赖记录
更新 package-lock.json
npm 安装的包分为两大类:项目包、全局包,使用场景完全不同。
安装在当前项目的 node_modules 中,仅当前项目可用,分为两种:
核心依赖包:记录在 dependencies,开发 + 线上都需要(如 moment、axios)
开发依赖包:记录在 devDependencies,仅开发需要(如打包工具、代码校验工具)
添加 -g 参数安装的包为全局包,全系统所有项目均可使用:
npm install 包名 -g安装路径:C:\Users\用户名\AppData\Roaming\npm\node_modules
使用场景:命令行工具类包(提供终端命令,而非项目代码)
规则:工具包全局安装,业务包项目安装
一个符合 npm 规范的标准包,必须满足 3 个强制要求:
以独立文件夹形式存在
根目录必须包含 package.json 配置文件
package.json 必须包含 3 个核心字段:
name:包名称(唯一)
version:包版本号
main:包的入口文件(require() 加载时默认读取的文件)
package.json 中版本号前的符号,控制包的更新规则:
^:兼容当前大版本的最新次版本(默认)
~:兼容当前次版本的最新修复版
无符号:固定精确版本
项目创建后,优先执行 npm init -y
永远不要提交 node_modules 到代码仓库
严格区分生产依赖与开发依赖
全局仅安装工具包,业务功能包安装为项目包
包是第三方模块的统称,npm 是管理包的核心工具,伴随 Node.js 自动安装
package.json 是项目协作核心,记录所有依赖,解决体积过大问题
依赖分为 dependencies(线上必需)和 devDependencies(仅开发)
项目包供当前项目使用,全局包提供系统级命令,-g 安装
规范的包必须包含独立目录、package.json 与核心配置字段