Node.js中模块加载机制

我们都知道,无论使用哪种模块,都需要通过require()进行引入,那么在require()内部,模块查找是有一定规则的,比如在引用系统模块和第三方模块时,都只写了模块名称,并没有写模块所在的路径。

模块查找规则一:

const a = require('./a.js');

当引入的模块有路径和文件后缀时,那么该模块会被直接引入。

模块查找规则二:

 const a = require('./a'); 

当引入的模块有路径,但是无文件后缀时,那么会先找同名.js文件,如果找到了,那么引入

如果未找到,再找同名文件夹,如果找到了同名文件夹,那会在该文件夹中找index.js文件,如果找到了,那么引入

如果还是未找到,那么会在当前文件夹中的package.json文件中找main选项中的入口文件,如果指定的入口文件不存在或者没有指定入口文件,那么就会报错,如若存在那么会执行入口文件。

模块查找规则三:

const a = require('a');

当使用require()引入模块时,没有模块路径,也没有模块的后缀,只有模块的名称,那么在这种情况下,node.js会假设它是系统模块,在系统模块中查找该模块,如果有就会去执行这个系统模块。

如果没有就会去node_modules文件夹中去查找该模块,那么首先会查找同名.js文件,如果有就会执行这个同名js文件

如果没有找到同名js文件,那么就会在node_modules中找是否有同名文件夹,如果有同名文件夹,那么就会去其中找index.js文件,如果有就会直接执行当前的index.js文件

如果没有就会去该文件夹下的package.json中的main选项中查找是否有入口文件,如果有就会执行入口文件,如果未找到就会报错。

如果觉得文章有帮助到你,可以扫描以下二维码
   请本文作者 喝一杯
pay_weixin pay_weixin

发表评论

电子邮件地址不会被公开。 必填项已用*标注