# 大纲-day02
## Buffer基本操作
> Buffer对象是Node处理二进制数据的一个接口。它是Node原生提供的全局对象,可以直接使用,不需要require(‘buffer’)。
- 实例化
+ Buffer.from(array)
+ Buffer.from(string)
+ Buffer.alloc(size)
- 功能方法
+ Buffer.isEncoding() 判断是否支持该编码
+ Buffer.isBuffer() 判断是否为Buffer
+ Buffer.byteLength() 返回指定编码的字节长度,默认utf8
+ Buffer.concat() 将一组Buffer对象合并为一个Buffer对象
- 实例方法
+ write() 向buffer对象中写入内容
+ slice() 截取新的buffer对象
+ toString() 把buf对象转成字符串
+ toJson() 把buf对象转成json形式的字符串
## 核心模块API
### 路径操作
- 路径基本操作API
### 文件操作
- 文件信息获取
- 读文件操作
- 写文件操作
- 目录操作
const fs = require('fs');
const path = require('path');
let strpath = path.join(__dirname,'data.txt')
fs.readFile(strpath,'utf-8',(err,data)=>{
// if(err)console.log("错误");return;
//如果不加上第二个参数utf-8,得到的是Buffer的实例对象,要用data.toString()来转成字符串格式
console.log(data);
})
let ret = fs.readFileSync('./data.txt','utf8');
console.log(ret);
const fs = require('fs');
const path = require('path');
let strpath = path.join(__dirname,"data.txt");
// fs.writeFile(strpath,"utf-8",(err,data)=>{
// })
// fs.writeFile(strpath,"你好",'utf-8',(err)=>{
// if(!err){
// console.log("成功")
// }
// })
// 同步操作
fs.writeFileSync(strpath,"hello world");
### 文件操作案例
atime: 文件访问时间
ctime:文件状态信息发生改变的事件
mtime:文件数据变化发生改变的时间
birthtime:文件创建的时间
// 大文件读写需要使用流式操作
const fs = require('fs');
const path = require('path');
let spath = path.join(__dirname,'./magic.zip');
//读取文件额数据流
let dpath = path.join(__dirname,'../myDoc','magic.zip');
//写文件的数据流
// 创建读取文件流
let readStream = fs.createReadStream(spath);
//创建写出文件流
let writeStream = fs.createWriteStream(dpath);
//采用基于事件的处理方式
// let num = 1;
// readStream.on('data',(chunk)=>{
// num++;
// writeStream.write(chunk);
// })
// readStream.on('end',()=>{
// console.log("文件读取完成" + num)
// })
// 从磁盘到内存是输入,从内存到磁盘是输出
// pipe直接把输入流跟输出流拼接到一块
fs.createReadStream(spath).pipe(fs.createWriteStream(dpath));
## 包
> 多个模块可以形成包,不过要满足特定的规则才能形成规范的包
### NPM (node.js package management)
> 全球最大的模块生态系统,里面所有的模块都是开源免费的;也是Node.js的包管理工具。
- [官方网站](https://www.npmjs.com/ )
### npm包安装方式
- 本地安装
- 全局安装
### 解决npm安装包被墙的问题
- --registry
+ npm config set registry=https//registry.npm.taobao.org
- cnpm
+ 淘宝NPM镜像,与官方NPM的同步频率目前为10分钟一次
+ 官网: http://npm.taobao.org/
+ npm install -g cnpm –registry=https//registry.npm.taobao.org
+ 使用cnpm安装包: cnpm install 包名
- nrm
+ 作用:修改镜像源
+ 项目地址:https://www.npmjs.com/package/nrm
+ 安装:npm install -g nrm
### npm常用命令
- 安装包 npm install
- 更新包
- 卸载包
### yarn基本使用
- 类比npm基本使用
## 自定义包
### 包的规范
- package.json必须在包的顶层目录下
- 二进制文件应该在bin目录下
- JavaScript代码应该在lib目录下
- 文档应该在doc目录下
- 单元测试应该在test目录下
### package.json字段分析
- name:包的名称,必须是唯一的,由小写英文字母、数字和下划线组成,不能包含空格
- description:包的简要说明
- version:符合语义化版本识别规范的版本字符串
- keywords:关键字数组,通常用于搜索
- maintainers:维护者数组,每个元素要包含name、email(可选)、web(可选)字段
- contributors:贡献者数组,格式与maintainers相同。包的作者应该是贡献者数组的第一- 个元素
- bugs:提交bug的地址,可以是网站或者电子邮件地址
- licenses:许可证数组,每个元素要包含type(许可证名称)和url(链接到许可证文本的- 地址)字段
- repositories:仓库托管地址数组,每个元素要包含type(仓库类型,如git)、url(仓- 库的地址)和path(相对于仓库的路径,可选)字段
- dependencies:生产环境包的依赖,一个关联数组,由包的名称和版本号组成
- devDependencies:开发环境包的依赖,一个关联数组,由包的名称和版本号组成
### 自定义包案例