在nodejs中,我们使用 require关键字来加载第三方包
那么,加载第三方包的规则是怎么样的呢,最终我们加载的是哪一个文件呢?
带着疑问,我们继续下面的探索
const art-template = require('art-template')
当我们使用如下代码引入一个第三方包的时候,
- 优先在当前同级目录下面查找 node_modules文件夹
- 找到
node_modules文件夹之后,在该文件夹下面查找art-template文件夹,找到art-template文件夹中的package.json文件,在package.json中有一个main属性,该属性指向一个文件目录,即为我们要加载的第三方模块的入口文件 - 如果没有找到
package.json文件或者没有找到main入口文件,则会默认加载art-template文件夹下的index.js文件,将其作为入口文件加载
- 找到
- 如果同级目录下面没有找到 node_modules文件夹,则会向上一级父亲级目录下查找 node_modules文件夹,执行与上面相同的查找逻辑
- 如果没有找到,会重复向上一层文件夹执行同样的查找逻辑
- 如果到磁盘根目录还没有找到,则报错
- Error: Can't find module '***'