模块标识
什么是模块标识?使用的require()引入外部模块时,使用的就是模块标识 ,可以通过模块标识来找到指定的模块
例如: var 对象=require("./02.module");
模块分成两大类
核心模块
-由node引擎提供的模块
-核心模块的标识就是,模块的名字
文件模块
-由用户自己创建的模块
-文件模块的标识就是文件的路径(绝对路径,相对路径)
相对路径使用 . 或 .. 开头
在node中有一个全局对象叫global,它和网页中的window类似
在全局中创建的变量都会作为global的属性保存
在全局中创建的函数都会作为global的方法保存
在node执行模块中的代码,它首先会在代码的最顶部,添加如下代码:
function (exports, require, module, __filename, __dirname) {
在代码最底部 添加如下代码:
}
所以,这里声明的变量全都是局部变量,实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了五个实参:
exports
-该对象用来将变量或函数暴露到外部
require
-函数,用来引入外部的模块
module
-module代表的是当前模块本身
-exports就是module的属性
__filename
-当前模块的完整路径
__dirname
-当前所在的文件夹的完整路径
exports和 module.exports
-通过exports只能使用.的方式来向外部暴露内部的值
exports.xxx=xxx;
-而module.exports既可以通过.的形式,也可以直接赋值
module.exports.xxx=xxx;
或者
module.exports={
xxx:xxx;
}
栈内存和堆内存
Var obj=new Object();
obj.name=123;
Var obj1=obj;
obj1.name=xxx;//这是在改对象的属性,对obj有影响,这就相当于module.exports的作用
Var obj2=obj;
obj2=123;//这是在改变量对obj没有影响,相当于exports的作用
|
Package(包)
NPM(Node Package Manager(管理))包管理器
-帮助其完成第三方模块的发布,安装和依赖,写Node的时候需要包可以到NPM下载
Buffer (缓冲区)
-Buffer的结构和数组很像,操作方法也和数组类似
-数组不能存储二进制的文件,而Buffer就是专门用来存储二进制数组的
-使用Buffer不需要引入模块,直接使用即可
-在Buffer中存储的都是二进制数据,但在显示时都是以16进制的形式显示
在Buffer中每一个元素的范围是00-ff 0-255
Buffer中的一个元素,占用内存的一个字节
-Buffer的大小一旦确定,则不能修改,Buffer实际上是对底层内存的直接操作
Buffer.from(str) 将一个字符串转换为Buffer
Buffer.alloc(size) 创建一个指定大小的Buffer
Buffer.allocUnsafe(size) 创建一个指定大小的Buffer,但可能包含敏感数据
buf.toString() 将缓冲区的数据转换成字符串