Node.js中的require

本文详细介绍了Node.js中的require方法,包括其在加载核心模块、自定义模块和第三方模块时的作用。强调了模块作用域的概念,以及如何通过exports实现模块间通信。还讨论了模块缓存机制,避免了重复加载,提高了效率。此外,讲解了模块标识的判断规则,包括路径、核心模块和第三方模块的加载方式。

_node中的require

node无法同时执行多个脚本文件

1. require

1.1 require是一个方法,作用就是用来加载模块

在Node中模块有三种:(核心模块,第三方模块,自己写的模块)

1.核心模块(fs,http,os,url,path)

var fs = require('fs')
var http = require('http')

2.自己写的文件模块(相对路径必须加 ./)

在这里插入图片描述
在这里插入图片描述

1.2 在node中没有全局作用域只有模块作用域

(外部访问不到内部,内部也访问不到外部)

a.js和b.js中的foo不一样

//a.js
console.log('a start');
var foo = 'aaa'
require('./b.js')
console.log(foo);
console.log('a end');
//b.js
console.log('b.js已经被执行了');
var foo = 'bbb'
console.log(foo);

在这里插入图片描述

a.js中的函数在b.js中不能使用

//a.js
console.log('a start');
function add(x, y) {
  console.log(x, y);
}
var foo = 'aaa'
require('./b.js')
console.log(foo);
console.log('a end');
//b.js
console.log('b.js已经被执行了');
add(1, 2)
var foo = 'bbb'
console.log(foo);

在这里插入图片描述

2.如何实现模块与模块之间通信

require方法有两个作用:
1.加载文件模块并执行里面的代码
2.拿到被加载文件模块到处的接口对象
在每个文件模块中都提供了一个对象exports
exports默认是一个空对象

//a.js
//用ret来接收b中的对象exports
var ret = require('./b.js')
console.log(ret.foo);
console.log(ret.add(1, 2));

//b.js
var foo = 'bbb'
//输出一个空对象
// console.log(exports);
exports.foo = foo
exports.add = function (x, y) {
  return (x + y)
}

在这里插入图片描述

3.优先从缓存加载

//main.js
require('./a')
require('./b')	//只是为了得到接口对象
//a.js
console.log('a被加载执行了');
require('./b')
//b.js
console.log('b被执行了');

在这里插入图片描述

由于在a中已经加载过了b,所以不会重复加载,可以拿到其中的接口对象,但是不会重复执行里面的代码,这样做的目的是为了避免重复加载提高模块加载效率

在这里插入图片描述

4.判断模块标识

4.1路径形式模块:文件后缀可以省略,一般用 . /.. /

4.2核心模块:已经被编译到了二进制文件中,使用名字来加载

4.3第三方模块:凡是第三方模块都必须通过npm下载,通过require(’‘包名’)的方式来进行加载才可以使用,第三方包和核心模块的名字不能一样

先找到当前文件所处目录中的node_modules目录
然后找node_modules/art-template
再去找node_modules/art-template/package.json文件
再去找node_modules/art-template/package.json文件中的main属性
main属性记录了art-template入口模块

var template = require('art-template')

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果找不到会一直往上一级查找,如果知道当前磁盘根目录还找不到,最后报错:can not find module xxx

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值