nodejs
一.nodejs简介 p3
nodejs是一个能够在服务器运行的js开放源代码
node是单线程的
p4 使用node执行js
p5 模块化简介
commonjs规范 :希望js在任何地方运行
es(es6前)缺陷:没有模块化 什么是模块? 一个js就是一个模块
reqire( **"path")//如果使用相对路径 必须用.. 或.开头
reqire( "./xxx/xxx.js")
let obj= reqire( "./xxx/xxx.js")
p7 模块化详解
核心模块 -直接写名字
文件模块 -写地址(路径)
在node中有一个全局对象global 类似网页的window对象
P8 exports 和module.exprots 区别
module.exprots可以导出对象
本质是相同的 exports只能通过.的形式暴露
module . exprots 能通过.的形式暴露 也能直接赋值
为什么exports只能通过 . 的形式暴露? 可以想成exports=module.exprots 但是 把exports={}时 把exports的地址改变了 exports不指向module.exprots 的地址 所以exports只能通过.的形式暴露
P9 包的简介
commonjs规范 由包结构 (1 package.jsonc 2 bin 3 doc 4 test ) 包描述文件组成:package.json bin
注意 任何json文件都不能写注释
package.json是一个项目描述文件, 里面记录了当前项目的信息。eg: 项目名称、版本、作者、[gitHub]
(https://so.csdn.net/so/search?q=gitHub&spm=1001.2101.3001.7020)地址、当前项目依赖哪些第三方
模块等。 使用npm安装第三方模块,是模块的相关信息会自动添加到package.json文件中
{
// 项目名称
"name": "kr-ui-platform",
// 项目版本
"version": "0.1.0",
// 由此设置,那么 npm将拒绝发布它,这是一种防止意外发布私有存储库的方法
"private": true,
// 项目描述,description是一个字符串。它可以帮助人们在使用npm search时找到这个包
"description": '',
//项目的主入口文件,在模块化项目中都会有一个主模块,main 里面填写的就是主模块的入口文件
"main": "index.js",
//定义命令别名,当命令很长时可以使用别名替换
//使用方法:npm run 别名
// scripts中配置可以 以键值对(key:value)的形式来取“别名”
"scripts": {
"start": "node index.js",
"server": "nodemon index.js --ignore client",
// 此项目运行命令: npm run serve
// 有的项目运行命令为: npm run dev(看各个项目的实际情况)
"serve": "vue-cli-service serve --mode development",
// 开发环境
"dev": "vue-cli-service build --mode dev",
// sit环境
"sit": "vue-cli-service build --mode sit",
// uat环境
"uat": "vue-cli-service build --mode uat",
// 打包别名 【
// 打包prod_zz_test的命令: npm run prod_zz_test
"prod_rj": "vue-cli-service build --mode prod_rj",
"prod_rj_clinical": "vue-cli-service build --mode prod_rj_clinical",
"prod_zz": "vue-cli-service build --mode prod_zz",
"prod_zz_test": "vue-cli-service build --mode prod_zz_test",
"test": "vue-cli-service build --mode test",
// 】
"lint": "vue-cli-service lint",
"test:e2e": "vue-cli-service test:e2e",
"test:unit": "vue-cli-service test:unit",
"analyzer": "cross-env use_analyzer=true npm run serve"
},
// 关键字,允许我们使用关键字去描述当前项目
"keywords": [],
//项目的作者
"author": "",
//项目遵循的协议,默认是ISC也就是开放源代码的协议
"license": "ISC",
//开发 依赖所需要的第三方模块(包)
"devDependencies": {
"gulp": "^3.9.1"
}
项目依赖
在项目的开发阶段和线上运营阶段,都需要依赖的第三方包,称为项目依赖;
使用npm install 包名命令下载的文件会默认被添加到 package.json 文件的 dependencies 字段中;
//项目 依赖所需要的第三方模块(包)
{
"dependencies": {
"jquery": "^3.3.1“
}
}
开发依赖
在项目的开发阶段需要依赖,线上运营阶段不需要依赖的第三方包,称为开发依赖;
使用npm install 包名 --save-dev命令将包添加到package.json文件的devDependencies字段中,以此来区分项目依赖;
{
"devDependencies": {
"gulp": "^3.9.1“
}
}
P10 npm简介
NPM (node package manager)
帮助第三方模块发布,安装和依赖
npm命令
1、npm -v : 查看npm版本。
2、npm init : 初始化后会出现一个package.json配置文件。可以在后面加上 -y , 快速跳过问答式界面。
3、npm install : 会根据项目中的package.json文件自动下载项目所需的全部依赖。
4、npm install 包名 --save-dev(npm install 包名 -D) :安装的包只用于开发环境,不用于生产环境,会出现在package.json文件中的dependencies属性中。
5、npm install 包名 --save(npm install 包名 -S):安装的包需要发布到生产环境的,会出现在package.json文件中的dependencies属性中。
6、npm list : 查看当前目录下已安装的node包。
7、npm list -g : 查看全局已经安装过的node包。
8、npm --help : 查看npm帮助命令。
9、npm update 包名 :更新指定包。
10、npm uninstall 包名 :卸载指定包。
11、npm config list :查看配置信息。
12、npm 指定命令 --help : 查看指定命令的帮助。
13、npm info 指定包名 :查看远程npm上指定包的所有版本信息。
14、npm config set registry registry.npm.taobao.org : 修改包下载源,此例修改为淘宝镜像。
15、npm root :查看当前包的安装路径。
16、npm root -g :查看全局的包的安装路径。
17、npm ls 包名 :查看本地安装的指定包及版本信息,没有显示empty。
18、npm ls 包名 -g :查看全局安装的指定包及版本信息,没有显示empty。
19、npm install 包名 -g 全局安装
P11 配置cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
P12 node搜索包流程
通过npm下载的包都放在node_nodules文件夹中,直接通过包名引入即可
var math = require('math')
node在使用模块名字(非路径)来引入模块时,它会首相在当前目录的node_modules中寻找是否含有该模块
如果有则直接使用
如果没有则去上一级目录的node_modules中寻找,
如果有则直接使用,如果没有则再去上一级目录的node_modules中寻找,
直到找到磁盘根目录
P13 Buffer缓冲区
P14 fs模块
文件的同步写入
所有的文件写入 如果说写入的文件不存在 那么会自动创建文件
文件写入 就是将我们数据写入到文件中 一下的三种方法也是一样的 所以说 都是写入
一般情况下 我们文件写入分为三步组成 同步写入最醒目 最清晰
其实写入文件就是将数据存到文件中 一共分为三步
第一 打开文件 第二 把数据放到文件中 第三 关闭文件
一共涉及到三个方法
1.openSync : 打开文件
内置三个参数
第一个参数是打开的文件路径
第二个参数是打开方式
文件的打开方式有三种
r : 只读方式打开
w : 写入方式打开 覆盖写
a : 写入方式打开 追加写
第三个参数是打开权限 这个参数一般不传
返回值是资源句柄
2.writeSync : 写入文件
内置四个参数
第一个参数是资源句柄
第二个参数是写入的数据
第三个参数是字符集 写入的字符集
第四个参数是写入的起始位置 但是 我们一般不传
3.closeSync : 关闭文件
内置一个参数 参数是资源句柄
const fs = require('fs');
// 打开文件
/*
1.openSync : 打开文件
内置三个参数
第一个参数是打开的文件路径
第二个参数是打开方式
文件的打开方式有三种
r : 只读方式打开
w : 写入方式打开 覆盖写
a : 写入方式打开 追加写
第三个参数是打开权限 这个参数一般不传
返回值是资源句柄
*/
// let fd = fs.openSync('../test/3.sync.txt', 'w');
let fd = fs.openSync('../test/3.sync.txt', 'a');
// 定义写入到文件的字符串
// let str = "五花马 千金裘 呼儿将出换美酒 与尔同销万古愁";
let str = "五花马 千金裘 呼儿将出换美酒 与尔同销万古愁\n";
// 写入文件
/*
2.writeSync : 写入文件
内置四个参数
第一个参数是资源句柄
第二个参数是写入的数据
第三个参数是字符集 写入的字符集
第四个参数是写入的起始位置 但是 我们一般不穿
*/
fs.writeSync(fd, str, 'utf-8');
// 关闭文件
/*
3.closeSync : 关闭文件
内置一个参数 参数是资源句柄
*/
fs.closeSync(fd);
P15异步文件写入
异步文件写入
``js fs.open(path,flags[,model],callback)`
-用来打开一个文件
-异步调用的方法,结果都是通过回调函数返回的
-回调函数两个参数:
err 错误对象
fd 文件的描述符
fs.write(fd,string[,position[,encoding]],callback)
-用来异步写入一个文件
fs.close(fd,callback)
-用来关闭文件
p16 简单文件写入
有同步和异步两种
fs.writeFile(file,data[,options],callback)
fs.writeFileSync(file,data[,options])
file 要操作文件的路径
data 要写入的数据
options 选项
callback 写入完成后执行的参数\
P17 流式文件写入
同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存的溢出
fs. createWriteStream (path[, options])
var fs=require("fs") ;
//流式文件写入
//创建一个可写流
var ws = fs.createWriteStream("he11o3. txt") ;
//通过监听流的open和close事件来监听流的打开和关闭
ws.once("open",function(){
console.log("流打开了");
});
ws.once("close",function(){
console.log("流关闭了");
});
//通过ws向文件中输出内容,可多次写入
ws.write ("通过可写流写入文件的内容");
ws.write ("网易云移动端播放器");
ws.write ("网络服务与最终用户的一个接口");
ws.write ("建立、管理、终止会话");
ws.write ("通过可写流写入文件的内容");
//关闭流
ws.end();
1.ws.once监听open,由于open是一次性的事件,没有必要用on
on(事件字符串,回调函数)
可以为对象绑定一个事件,
once(事件字符串,回调函数)
可以为对象绑定一个一次性事件,改时间将会在触发一次后自动失效
P18 简单文件的读取
异步 fs.readFile(路径,{配置信息json},回调函数(err对象,data数据为Buffer)) 在回调函数中data.toString()获取文件内容,或者配置读取时为'utf-8' 同步 fs.readFileSync(路径,{配置信息json})