Node.js基础学习--Node.js 模块化机制

Node.js基础学习--Node.js 模块化机制

  • 什么是模块化机制
  • CommonJS 规范
    • CommonJS 规范的特点
    • module 对象
      • module.exports
    • require 命令
      • 加载规则
      • require main
      • 目录的加载规则

什么是模块化机制

模块化是一种设计思想。通过将整体的系统分割成小模块来实现,以降低开发的难度。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。

Node 遵循了 CommonJS 的模块规范,来隔离每个模块的 作用域,使每个模块在它自身的命名空间中执行。

CommonJS 规范

CommonJS 规范致力于弥补 JavaScript 没有标准的缺陷, 让 JavaScript 有能力去开 发复杂应用, 同时具备跨平台能力。

模块必须通过 module.exports 导出对外的变量或接口,通过 require() 来导入其他模 块的输出到当前模块作用域中。

CommonJS 规范的特点

1、所有代码运行在当前模块作用域中,不会污染全局作用域
2、模块同步加载,根据代码中出现的顺序依次加载
3、模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以 后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。

module 对象

Node内部提供一个Module构建函数。所有模块都是Module的实例

module.exports

module.exports 属性表示当前模块对外输出的接口,其他文件加载该模块, 实际上就是读取 module.exports 变量。
为了方便,Node 为每个模块提供一个 exports 变量,指向 module.exports。 这等同在每个模块头部,有一行这样的命令

 var exports = module.exports;

这样的结果是,在对外输出模块接口时,可以向 exports 对象添加方法。

exports.add = function (r){
     
	return Math.PI * r *r
};

例子
写入

module.exports.name='Biden'
module.exports.age=78

module.exports.getName=function(){
     
    console.log("Name:"+this.name);
}
module.exports.getAge=function(){
     
    console.log('Age:'+this.age);
}

读取

const person = require('./demo.js')
person.getName();
person.getAge();

require 命令

Node 使用 CommonJS 模块规范,内置的 require 命令用于加载模块文件。 require 命令的基本功能是,读入并执行一个 JavaScript 文件,然后返回该模块的 exports 对象。如果没有发现指定模块,会报错。

加载规则

require 命令用于加载文件,后缀名默认为.js。

// An highlighted block
var foo = require();

1.绝对路径的模块文件:参数字符串以“/”开头
2.于相对路径(跟当前执 行脚本的位置相比)的模块文件:如果参数字符串以“./”开头
3.路径:不以“./“或”/“开头,直接写路径
4.加载的是一个默认提供的核 心模块(位于 Node 的系统安装目录中),或者一个位于各级 node_modules 目录的 已安装模块(全局安装或局部安装):不以“./“或”/“开头
5.如果指定的模块文件没有发现,Node 会尝试为文件名添加.js、.json、.node 后,再去搜索。

require main

require 方法有一个 main 属性,可以用来判断模块是直接执行,还是被调用执 行。直接执行的时候(node module.js),require.main 属性指向模块本身。

目录的加载规则

设置一个入口文件,让 require 方法可以通过这个入口文件,加载整个目录。

{
     
	"name":"someleb",
	"main":"./lib/someleb.js"
}
//json

require 发现参数字符串指向一个目录以后,会自动查看该目录的 package.json 文件,然后加载 main 字段指定的入口文件。

你可能感兴趣的:(web学习,javascript,node,nodejs,node.js)