Node.js 模块系统

一、模块分类
在NodeJS下,模块分为三类:核心模块,第三方模块,自定义模块。
(2)核心模块|
node.js提供,被编译成二进制执行文件,可以被解析器直接使用,加载速度最快。
(2)第三方模块
基于Node.js核心模块,很多组织和个人提供了大量的第三方扩展应用模块,常用的第三方模块:express,less,webpack...
(3)自定义模块
文件式自定义模块,目录式模块。

二、核心模块
也叫绝对模块,指Node.js的内置模块,无需下载,直接使用。
(1)加载模块
require()函数用于加载一个模块,require('querystring')

//解析字符串
//借助核心模块querystring
//引入核心模块
var querystring = require('querystring');
//查询字符串
var str = 'name=tom&age=10&sex=男';
//解析一个http请求中的查询字符串
var res = querystring.parse(str);
console.log(res);  //{ name: 'tom', age: '10', sex: '男' }

三、自定义模块
在NodeJS的文件中,任何一个JS文件都是一个模块,在JS文件中称为模块作用域。
在任意一个JS文件中,自动包含一个function,任何自己写的代码自动被function所包含 

(function(exports,require,module,__filename,__dirname){
  //程序员自己写的代码
  //__filename 文件的完整路径和名称
  //__dirname 文件的完整路径
  //require 用于引入其他的模块
  //moudule.exports 导出某些模块,是一个对象。
})
//功能模块:用于计算圆的周长和面积
function getArea(r){
  return 3.14*r*r;
};
//导出方法
module.exports.fn=getArea;

//导入功能模块
var obj = require('./function.js');
console.log(obj);  //{ fn: [Function: getArea] }
//求圆的面积,其实就是调用对象下fn方法
var res = obj.fn(2);
console.log(res);  //12.56

(1)相关练习:创建一个主模块,在创建一个功能模块(求长方形的面积),把功能模块导出,在主模块中导入,并调用方法。

//主模块
//导出功能模块
var rect = require('./kehoulianxi.js');  //可以不写后缀名,自动查找.js文件
//console.log(rect);        //{}
var s = rect.getArea(1,2);
console.log(s);            //2
var l = rect.getLength(1,2);
console.log(l);            //6

//功能模块--长方形面积,周长
function getArea(width,height){
  //面积
  return width*height;
};
//周长
function getLength(width,height){
  return 2*(width+height);
};
//公开某些功能
module.exports.getArea = getArea;
module.exports.getLength = getLength;

//exports和module.exports功能完全一致
console.log(exports===module.exports);   //true

(2)模块分类

 以路径开头 b不以路径开头 
 文件模块 require('./rect.js'); 通常用于用户自定义模块  require('querystring'); 用于官方定义的核心模块 
 目录模块 require('./1_1'); 目录下存在一个index.js文件或者package.json文件声明main属性  require('2_1'); 要求放在当前目录下node_modules中 


上一篇: Node.js 全局对象
下一篇: Node.js 包和NPM
作者邮箱: 203328517@qq.com