node 中第三方模块的加载过程原理
凡是第三方模块都必须通过 npm 来下载
- 使用的时候就可以通过
的方式来进行加载才可以使用require('包名')
- 不可能有任何一个第三方包和核心模块的名字是一样的
- 既不是核心模块、也不是路径形式的模块
加载过程如下:
- 先找到当前文件所处目录中的
目录node_modules
- 然后是
node_modules/包名
- 然后是
文件node_modules/包名/packagejson
- 然后找
文件中的node_modules/包名/package.json
属性main
-
属性中就记录了main
的入口模块包
- 然后加载使用这个第三方包
- 实际上最終加载的还是文件
- 如果
文件不存在或者package.json
指定的入口模块是也没有则main
会自动找该目录下的node
(也就是说index.js
会作为一个默认备选明)index.js
如果以上所有任何一个条件都不成立,则会进入上一级目录中
node_modules
目录查找。如果上一级还没有,则继续往上上一级查找
如果直到当前磁盘根目条还找不到, 最后报错;
can not find module xxx