做 Node.js 项目的时候,安装依赖包和模块是家常便饭。这些支撑项目运行的外部包,通过 NPM(Node 包管理器)装起来非常方便——它是管理 Node.js 模块的流行工具。

当我们用 NPM 安装包时,它会把这些文件存在电脑上的某个特定位置。这篇教程就来搞清楚,在 Windows 10/11 上 npm 到底把包装到哪里了。

先说明一下*,去找安装位置之前,我希望你系统上已经配好了 Node.js 和 NPM。

Windows 上装好 Node.js 之后,它会把自己的可执行文件路径加进系统环境变量,这样我们就能在命令行里直接使用 Node.js 和 npm。

Windows 上某个项目本地安装的 NPM 包目录路径:

想用 npm 装包的人,只要在命令提示符里先进入项目目录,再运行下面这条命令就行:

npm install package-name

执行这条命令后,它会从 npm registry(npm 仓库)下载指定的包以及所有必需依赖,装进一个叫 node_modules 的文件夹里。这个文件夹会创建在你当前项目的工作目录下。

举个例子,假设我们正在开发某个 Node.js 应用,项目目录叫 my-first-app。

那么我们先用命令提示符切到那个目录,再装一个包,比如 Go。

npm install go

上面这条命令会从 NPM 仓库下载并安装 go 包,装到你当前所在目录下的 node_modules 文件夹里。

项目内的 NPM 模块目录

另外,如果你的项目依赖多个模块,npm 也会把它们的依赖一并装好,只不过会在你的 node_modules 目录里形成嵌套的文件夹结构——每个包都装在自己的文件夹里。

举个例子,如果你的项目依赖 express 模块,而 express 又需要 body-parser 模块,那 node_modules 目录的文件夹结构会是这样:

node_modules
├── express
│   ├── index.js
│   ├── ...
│   └── node_modules
│       ├──  body-parser
│       ├── index.js
│       └── ....
└── go
    ├── index.js
    ├── ...
    └──  bin

可以看到,每个包都有自己的目录,而它所需的依赖会装在一个名为 node_modules 的子目录里。

Windows 10 或 11 上全局安装的 NPM 包目录

有时候我们需要装的 NPM 包并不是给某个具体项目用的,而是要全局安装,这样多个项目都能受益。这样开发者就不用为多个项目反复安装同一个公共包了。

要全局安装 NPM 包,只要在常规安装命令后面加上 -g 参数,语法如下:

npm install -g <package-name>

当你全局安装一个包时,它会被存到文件系统里另一个位置,而不是某个项目自己的文件夹中。

在 Windows 上,npm 把全局安装的包存在这个目录:C:\Users*your-username*\AppData\Roaming\npm

把 your-username 换成你当前的用户名。

在这个 NPM 文件夹下,你会看到一个叫 node_modules 的目录,里面就是你在 Windows 10 或 11 上所有通过 npm 安装的包。

NPM 文件夹路径 Windows 10 或 11 中的 Node Modules 目录路径

总之,简单说: 当你本地安装一个包时,npm 会把它装到你命令提示符当前工作目录下的 node_modules 目录里。

而当你全局安装一个包时,npm 会把它装到 %AppData%\npm\node_modules 目录。搞清楚 npm 把包装在哪里,对管理 Node.js 项目和依赖很有帮助。