2.0-node模块

一、模块的概念

在node出现之前,js并没有模块系统的概念,后来出现了CommonJS规范,弥补了javaScript没有模块的缺陷。

CommonJS对模块的定义十分简单:模块引用模块引用模块标识

虽然说,我们之前使用的例如jQuery是一个模块,但一方面,这样的模块并不是很多。另一方面,就拿jQuery来说,内部的很多插件模块在使用的时候必须按序导入,这样看来,其实并不是一个理想的模块系统。

node的出现,形成了较好的模块系统,使得开发更加的高效。

二、语法

1.引入其他的模块

简单来说,引入模块,就相当于在html中引入jQuery

  • node.js中,通过require()函数来引入外部的模块。require()可以是传递一个文件的路径作为参数,node

将会自动根据该路径来引入外部模块。

  • 这里的路径,如果使用相对路径,必须以 ...开头。
  • 使用require()引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块。
  • 当所需模块在node_module这个文件夹下的话,在引入的时候可以不写完整路径,只写node_modules下的文件夹的名字,node系统会自动找下面文件名为index.js的文件(注意这里必须是index.js)
  • 模块分成两大类:核心模块:由node引擎提供的模块(核心模块的标识就是,模块的名字);文件模块:由用户自己创建的模块(模块的标识就是绝对路径,相对路径)。
  • 使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块。
  • node中一个js文件就是一个模块。
  • 在node中,每一个js文件中的js代码都是独立运行在一个函数中。而不是全局作用域,所以一个模块中的变量和函数在其他模块中无法访问。
  • 这个最顶部的函数是这样的:function(exports,requrie,module,_filename,_dirname){}
  • 这个函数是由node的引擎所调用,而在内部所使用的方法都是通过参数传进去的。比如下面的require,exports
我们分别介绍一下这5个参数
exports  -该对象用来将变量或函数暴露到外部
require  -函数,用来引入外部的模块
module   -module 代表的是当前模块本身 exports就是module的属性  exports==module.exports  
_filename -当前模块的完整路径
_dirname -当前模块所在文件夹的完整路径
//引入module.js模块,使用变量md接收一个对象
var md=require("./module.js")
console.log(md)
  • node在使用模块的名字来引入模块时,它会首先在当前目录的node_modules中寻找是否含有该模块。如果有则直接使用,如果没有则去上一级目录寻找,直到找到为止。直到找到磁盘的根目录,如果依然没有,则会报错。

三、.向外暴露属性或方法

1.我们可以通过exports或者module.exports(两者是同一个对象)来向外部暴露变量和方法 只需要将需要暴露给外部的变量或方法设置为exports的属性即可。

exports.x="我是module.js中的x";
exports.y=function(){}
//引入上面的模块
var obj=require('./module.js');
console.log(obj);	//结果是{x:"我是module.js中的x"}

2.exports/modules.exports的区别

//可以使用module.exports导出一个对象
module.exports={
	name:"lhh",
	age:28,
	sayName:function(){
		console.log(this.name)
	}
}
  • exports是module.exports的一个引用,所以通过exports.name或者是exports.age的方式导出一个对象,此时和module.exports指向的是同一个对象。但如果使用exports={}的方式导出一个对象,相当于exports指向了一个新的对象,但是再导入模块的时候,所寻找的是本模块,也就是module下的exports对象,所以使用exports导出这时候不会导出一个所想要的对象。
  • 在用法上exports只能 使用.的方式导出,而module.exports可以通过对象的方式导出。

四、全局对象global

在node中有一个全局对象global,它的作用和网页中window类似 在全局中创建的便来哪个都会作为global的属性保存 在全局中创建的函数都会作为global的方法保存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值