require是一个方法,它的作用就是用来加载模块的
- 在 Node中,模块有三种:
- 具名的核心模块,例如fs、 http
- 用户自己编写的文件模块
注意:相对路径必须加 ./
可以省略后缀名(.js)
相对路径中的./不能省略,否则报错,省略代表的是核心模块
//可以
require('./b.js')
//推荐:可以省略后缀名
require('./b')
案例1:在 a.js 中加载执行 b.js
- a.js
console. log('a start')
require('./b.js')
console.log('a end')
- b.js
console.log('b.js文件被加载执行了')
- 执行:
案例2:a.js 中加载 b.js 、c.js
- a.js
console. log('a start')
require('./b.js')
console.log('a end')
- b.js
console.log( 'b start' )
require('./c.js ')
console.log( 'b end ' )
- c.js
console.log('ccc')
- 执行:
- require就是加载执行文件中的代码
在 Node 中,没有全局作用域,只有模块作用域
- 外部访问不到内部
- 内部也访问不到外部
- 默认都是封闭的
- 既然是模块作用域,那如何让模块与模块之间进行通信
- 有时候,我们加载文件模块的目的不是为了简简单单的执行里面的代码,更重要是为了使用里面的某个成员
案例3:没有被导出的变量或方法会找不到对象
- a.js
var foo = 'aaa'
console.log('a start')
function add(x, y) {
return x + y
}
require('./b.js')
console.log('a end')
console.log(‘foo的值是:', foo)
- b.js
console.log('b start')
console.log(add(10,20))
var foo = " bbb'
require('./c.js ')console.log('b end')
- 执行:
加载与导出
require 方法有两个作用:
- 加载文件模块并执行里面的代码
- 拿到被加载文件模块导出的接口对象
在每个文件模块中都提供了一个对象:exports
exports 默认是一个空对象
你要做的就是把所有需要被外部访问的成员挂载到这个 exports 对象中
案例4:调用 b.js 对象中的值及方法
a.js
var bExports = require('./b')
console.log(bExports.foo)
console.log(bExports.add(10, 30))
b.js
var foo = 'bbb'
exports.foo = 'hello'
exports.add = function (x, y) {
return x + y
}
案例5:调用b.js中的 age 的值
a.js
var bExports = require('./b')
console.log(bExports.age)
b.js
var age = 18
exports.age = age
结果:18