运行npm install命令,npm会根据package.json中描述的依赖项安装对应的模块,并在当前的文件夹下生成node_modules文件夹,以非全局模式安装的所有第三方模块都会被放置在该文件夹中。
使用全局模式安装的模块位于Node预先定义的系统目录中,可以使用npm提供的命令查看。
// 查看全局模块的安装位置 $ npm config get prefix C:\Users\likaiboy\AppData\Roaming\npm
当在Node代码文件中使用require方法来引入第三方模块的时候,Node会在node_modules文件夹中查找对应的模块,每个模块也都有自己的package.json描述文件,Node会加载其main字段定义的主文件。
如果一名初次接触Node的开发者第一次打开node_modules文件夹,一定会震惊于里面的文件夹数量,而起源可能仅是执行了一个简单的npm install操作,如图2-2所示。
npm install命令会根据dependencies和devDependencies中的定义去安装对应的模块,而这些模块往往也依赖于别的模块,这样就形成了依赖的树形结构。npm会统计所有的依赖项,然后把它们统一放在node_modules目录下,这也是该目录下会有这么多陌生文件夹的原因。
为了避免每次都从远方仓库下载模块,npm会在安装模块的时候在本地缓存一份,这样下次下载的时候就可以直接从本地安装,如图2-3所示。
// 查看npm缓存目录 npm config get cache // Linux/Mac OS输出 /Users/likai/.npm // Windows输出 C:\Users\likaiboy\AppData\Roaming\npm-cache
图2-2 执行npm install express一共安装了50个模块
图2-3 Mac OS下的npm cache目录
大量的npm缓存会占用很大的系统空间,如果读者经常运行npm install操作,那么缓存文件夹可能会有几个GB的体积。可以运行npm cache clean -force命令清空所有的缓存。