1.Node为JS提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具名核心模块中了。
例如:fs就是文件操作的的核心模块,http服务构建的http模块,path路径操作模块,os操作系统信息模块(获取系统信息)
如果想要使用模块,就要先加载他,用require()方法;
2.在Node中有三种模块:
- 具名的核心模块
- 用户自己编写的文件模块(js文件,json文件,....),
用相对路径,必须加"./",不能省略
后缀名可以省略,
- 第三方模块
注意:在Node中没有全局作用域,只有模块作用域(超出文件的变量挥着方法没有用,外部访问不到内部,内部也访问不到外部,默认都是封闭的)
问题:因为不能使用加载文件的成员,如何让模块与模块之间通信?
require()方法有两个作用:
- 加载文件并执行文件的代码;
- 拿到被加载文件模块到处的接口对象
每个文件模块都提供了一个对象——exports,exports默认是一个空对象,可以把所需要的外部访问成员挂载到这个export对象中
例如在a文件中的代码为:
var bExports = require('./b')
var fs = require('fs')
console.log(bExports.foo)
console.log(bExports.add(10, 30))
console.log(bExports.age)
bExports.readFile('./a.js')
fs.readFile('./a.js', function (err, data) {
if (err) {
console.log('读取文件失败')
} else {
console.log(data.toString())
}
})
在b文件中代码为:
var foo = 'bbb'
// console.log(exports)
exports.foo = 'hello'
exports.add = function (x, y) {
return x + y
}
exports.readFile = function (path, callback) {
console.log('文件路径:', path)
}
var age = 18
exports.age = age
function add(x, y) {
return x - y
}
最后程序执行效果: