一:核心模块:
Node为js提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具名的核心模块中了,例如文件操作的fs
核心模块,http
服务构建的http模块,path
路径操作模块,os
操作系统信息模块
以后只要说这个模块是一个核心模块,就要马上想到如果要使用它,就必须:
var fs=require('fs');
var http=require('http');
比如使用操作系统os核心模块和操作路径的path模块
//1.用来获取机器信息的
var os=require('os');
//获取当前机器cpu信息
console.log(os.cpus());
//获取内存信息
console.log(os.totalmem());
//2.用来操作路径的
var path=require('path');
//extname获取路径的后缀名
console.log(path.extname('c:/a/hello.txt'));
二:简单的模块化系统
require是一个方法,它的作用就是用来加载模块的
在Node中模块有三种:
1.具名的核心模块,如fs,http
2.用户自己编写的文件模块
3.相对路径必须加 ./,可以省略后缀名,例如代码中的./2.js
可以写成./2
调用自己编写的文件模块1.js
console.log('1 start');
require('./2.js');
console.log('1 end');
2.js
console.log('2 start');
require('./3.js');
console.log('2 end');
3.js
console.log('333');
1.在Node中,没有全局作用域,只有模块作用域,外部访问不到内部,内部也访问不到外部
1.js
var foo=111;
console.log('1 start');
require('./2.js');
console.log('foo的值是:'+foo);
console.log('1 end');
2.js
console.log('2 start');
var foo=222;
console.log('2 end');
1.1既然是模块作用域,那么如何让模块与模块之间通信
我们加载文件模块的目的不是为了简简单单的执行里面的代码,更重要的是为了使用里面的某个成员
require方法有两个作用
1.加载文件模块并执行里面的代码
2.拿到被加载文件模块导出的接口对象
在每个文件模块中都提供了一个对象:exports
exports默认是一个空对象,我们要做的就是把所有需要被外部访问的成员挂载到这个exports对象中
1.js
var ret=require('./2.js');
console.log(ret);
console.log(ret.foo);
console.log(ret.add(12,13));
2.js
exports.foo='hello';
exports.add=function(a,b){
return a+b;
}