require的加载机制

require的加载机制

效果

在我们使用一个模块时,我们会使用require命令来加载这个模块。以加载一个自定义模块为例,require(文件名)的效果是:

  1. 执行这个文件中的代码(会把代码执行一遍)
  2. 把这个文件中的module.exports对象中的内容返回出来。

以如下代码为例:

// moudule1.js
var a = 1;
var b = 2;
console.log(a+b);
var c = a+b;
module.exports = {
	data: c
}

在index.js中使用模块

// index.js
const obj = require('./moudule1.js');
console.log(obj);

//这里的obj对象就是moudule1.js中的module.exports对象

require加载规则:

  • require优先加载缓存中的模块。同一个模块第一次require之后,就会缓存一份,下一次require时就直接从缓存中去取。
  • 如果是加载核心模块,直接从内存中加载,并缓存
    • 加载核心模块的格式是const xxx = require("模块名") 。不能写相对路径!
  • 如果是相对路径,则根据路径加载自定义模块,并缓存
    • require('./main')为例( 省略扩展名的情况)
    • 先加载main.js,如果没有再加载main.json,如果没有再加载 main.node(c/c++编写的模块),找不到就报错。
  • 如果不是自定义模块,也不是核心模块,则加载第三方模块
    require('XXX')为例:
    • node 会去本级 node_modules 目录中找xxx.js---->xxx.json ----> xxx.node(找到一个即返回),找到并缓存。
    • 如果找不到,node 则取上一级目录下找node_modules/xxx 目录,规则同上
    • 如果一直找到代码文件的文件系统的根目录还找不到,则报错:模块没有找到。

module.paths命令中可以看到搜索路径中包含node_modules这个文件夹

xxx.js中输出module.paths可以查看

参考

参考https://www.npmjs.cn/getting-started/what-is-npm/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值