41-npm node_modules 包查找规则

如果导入的模块不是nodejs的内置模块,如fs(文件读写模块),path(路径模块),http(服务器模块),也不是以/…/ 或者./ 开头的本地模块,而是第三方模块(通过npm下载的模块)

那么nodejs会尝试从当前模块所在目录开始,尝试在它的 node_modules 文件夹里加载相应模块,根据模块的 package.json 来加载对应的模块;

如果没有找到,那么就再向上一级目录移动,查找上一级目录的 node_modules 下有无对应的模块,直到文件系统的根目录为止。

例如,假设在 /root/home/user/bottomBar/index.js 文件里调用了:

1
import bar from  "bar.js"

那么 nodejs 查找其位置的顺序依次为:

  • /root/home/user/bottomBar/node_modules/bar.js
  • /root/home/user/node_modules/bar.js
  • /root/home/node_modules/bar.js
  • /root/node_modules/bar.js
  • /node_modules/bar.js

若果追踪到文件系统的根目录也没有找到对应的依赖,那么nodejs就会找不到对应模块的报错。

  1. 安装的模块里又引用了其他的模块,这个模块会按照规则先在自己的 node_modules里查找它自己引用的模块,找不到再向上查找。
  2. 当多个同级模块都引入了同一个模块,但它们的版本不一样。模块之间是互相独立的,他们都会在它自身的 node_module 里先找,如果都找到了,那他们所用的模块确实是不同版本的。如果没找到就会向上查找。
  3. 使用全局模式安装的包默认不能直接通过 require 使用,所以在查找时也不会查找全局模式安装的包。

41-npm node_modules 包查找规则
https://flepeng.github.io/021-frontend-nodejs-13-包管理-01-nodejs-npm-41-npm-node-modules-包查找规则/
作者
Lepeng
发布于
2021年8月4日
许可协议