NodeJS
模块
1.Commonjs规范
主要是为了你不javascript没有标准的缺陷
希望js能在任何地方运行
对模块的定义
模块引用–require()
模块定义–就是一个js文件
模块标识
2.
在node中,通过require()函数引入外部模块
require()可以传递一个文件的路径为参数,node将自动根据路径来引入外部模块
路径,必须使用相对路径,必须以.或…开头
使用require()引入模块之后,该函数返回一个对象,这个对象代表的是引入的模块
3.
核心模块的标识就是,模块的名字
文件模块的标识就是文件的路径
4.
Node中有个一全局对象global,他的作用和网页中window类似
在全局中的创建的变量都会作为global的属性保存,
在全局中创建的函数都会作为global的方法保存
node在执行模块中的代码时,会在代码最顶部添加代码
function(exports,require,module,_filename,_dirname){
//最底部添加
}
模块化的五个参数
exports
-用来将变量或者桉树暴露到外边
require
-用来引入外部的模块
module
-用代表的当前模块本身
-exports就是module的属性
-既可以使用exports导出,也可以使用module.exports导出
_filename
-当前模块的一个完整路径
_dirname
-当前模块所在文件夹的路径
Module.exports和exports的区别
通过exports只能使用.的方式来向外暴露内部变量
Exports.xxx=xxx
module.exports既可以通过.的方式,也可以直接赋值
包
包实际上就是压缩文件,解压之后还原为目录.
包的描述
package.json是最重要的文件,对包的描述
NPM(node Package Manager)
npm命令:
npm -v 查看版本
Npm -version 查看所有模块的版本
npm search 包名 搜索包
npm init 初始化/生成package.json文件
npm install math 安装包
npm remove 包名 删除包
npm install 包名 --save 安装到添加依赖
npm install / i 下载当前项目依赖的包
npm install 包名 -g 全局安装
淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm 代替 npm 速度比较快
npm 还能使用,
安装完验证是否安装成功
npm config get registry
通过npm下载的包都放在node_modules文件夹中,
通过npm下载的包,直接引入包名即可
node 在使用模块名引入模块时,首先在当前目录的node_modules中查找是否有该 模块,如果有直接使用,没有就去上一级目录的node_modules中查找
如果有使用,没有再去上一级找,直到找到为止,找到磁盘的跟目录,没有就报错
buffer.(缓冲区)
buffer的结构跟数组像
-数组不能存储二进制文件,而buffer就是专门用来存储二进制数据
-buffer不需要引入模块,直接使用即可
-在buffer中存储的都是二进制数据,但是显示的时候以16进制形式显示,
计算机一个0 或一个1 我们成为1位(bit)
8bit=1byte(字节)
1024byte=1kb
1024kb=1mb
1024mb=1gb
1024gb=1tb
Var buf=Buffer.from(str);//将字符串转为buffer
Buf.length 获取的是内存大小
Str.length 获取的是字符串的长度
Buffer.alloc(10)//大小一旦确定就不能改变
buf.toString()将缓存区转为字符串
fs(文件系统)
通过node操作系统中的文本文件
加载模块(核心模块,直接引入)
-const fs=require(‘fs’);
同步和异步调用
同步会阻塞程序执行,除非操作完毕,否则不会往下执行
异步不会阻塞程序执行,二十在操作完时,通过回调函数将结果返回
同步打开文件
1
fs.openSync(path,flags[,mode])
-path 文件路径
-flags 打开文件的操作
r 只读
w 可写
-mode 设置文件操作权限,不用
返回值
写入文件
fs.writeSync(fd,”内容”)
保存并关闭
fs.closeSync(fd)保存并关闭文件
异步打开文件
fs.open(路径,打开文件的方式,回调函数)
//简单文件写入
fs.writeFile(参数1:文件,参数2:写的内容,
参数3:{
flag: -r只读
-w可写
-a追加
}参数3:回调函数)
//流式文件写入
let ws=fs.createWriteStream(‘hello3.txt’)
监听open
ws.once(‘open’,function(){ console.log(‘打开了’) })
监听close
ws.once(‘close,function(){ console.log(‘关闭了’) }’)
Ws.write(‘通过可写流写入文件的内容’)
Ws.write(‘通过可写流写入文件的内容’)
Ws.write(‘通过可写流写入文件的内容’)
ws.close() || Ws.end()关闭流
文件的读取
Fs.readFile(‘文件路径名字’,function(err,data){
If(!err){
//Console.log(“成功”)
Fs.writeFile(‘文件路径名字’,要写入的内容(data),function(){
Console.log(‘写入陈功’)
})
}
})