NVM常用命令
1.nvm list
查看当前安装Node.js所有版本
2.nvm install 版本号
安装指定版本的Node.js
3.nvm uninstall 版本号
卸载指定版本的Node.js
4.nvm use 版本号
选择指定版本的Node.js
NodeJS环境和浏览器环境执行JS代码区别
1.Node环境和浏览器环境区别
Node JS环境和浏览器一样都是一个JS的运行环境,都可以执行JS代码,但是由于宿主不同所以特点也有所不用
1.1内置对象不同
- 浏览器环境中提供了window全局对象
- Node JS环境中的全局对象不叫window,叫global。
1.2this默认指向不同
- 浏览器环境中全局this默认指向window
- Node JS环境中全局this默认指向空对象{}
1.3API不同
- 浏览器环境中提供了操作节点的DOM相关API和操作浏览器的BOM相关API
- Node JS环境中没有HTML节点也没有浏览器,所以Node JS环境中没有DOM/BOM
自定义模块
1.什么是模块?
1.1浏览器开发中的模块
在浏览器开发中为了避免命名冲突,方便维护等等,我们采用类或者立即执行函数来封装JS代码,来避免命名冲突和提升代码的维护性,其实这里的一个类或者一个立即执行函数就是浏览器开发中一个模块。
let obj = {
模块中的业务逻辑代码
};
;(function() {
模块中的业务逻辑代码
window.xxx = xxx;
}) ();
存在的问题:没有标准没有规范
1.2Node JS开发中的模块
Node JS采用Common JS规范实现了模块系统
1.3CommonJS规范
CommonJS规范规定了如何定义一个模块,如何暴露(导出)模块中的变量函数,以及如何使用定义好的模块
- 在CommonJS规范中一个文件就是一个模块
- 在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的
- 在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其他文件才可以使用
- 在CommonJS规范中想要其他文件暴露的变量函数必须通过require()导出模块才可以使用
NodeJS-Require注意点
1.exports和module.exports区别
exports只能通过exports.xxx
方式导出数据,不能直接赋值
module.exportx既可以通过module.exportx.xxx方式导出数据,也可以直接赋值
注意点:
在企业开发中无论哪种方式都不要直接赋值,这个问题只会在面试中出现
1require注意点:
1.1require导入模块时可以不添加模块的类型,如果没有指定导入模块的类型,那么会依次查找.js .json .node文件,无论是三种类型中的哪一种,导入之后都会转换成JS对象返回给我们
1.2导入自定义模块时必须指定路径
require可以导入“自定义模块(文件模块)”,“系统模块(核心模块)”,“第三方模块”
导入“自定义模块”模块时,前面必须加上路径
导入“系统模块”和“第三方模块”是不需要添加路径的
Node包和包管理
1.什么是包?
前面说过在编写代码的时候尽量遵守单一原则,也就是一个函数尽量只做一件事情
例如:读取数据函数/写入数据函数/生成随机数函数等等,不要一个函数既读取数据又写入数据又生成随机数,这样写代码非常容易出错,也非常难以维护
在模块化开发中也是一样,在一个模块(一个文件中)尽量只完成一个特定的功能,但是有些比较复杂的功能可能需要由多个模块组成
例如:jQuery选择器相关的代码在A模块,css相关的代码在B模块.....我们需要把这些模块组合在一起才是完成的jQuery,那么这个时候我们就需要一个东西来维护多个模块之间的关系,这个维护多个模块之间的东西就是“包”
简而言之:一个模块就是一个单独的文件,一个包中可以一个或者多个模块
2.NodeJS包的管理
在NodeJS中为了方便开发人员发布,安装和管理包,Node JS推出了一个包管理工具
NPM(Node Package Manager)
NPM不需要我们单独安装,只要搭建好Node JS环境就已经自动安装好了
NPM就相当于电脑上的“QQ管家软件助手”,通过NPM我们可以快速找到我们需要的包,可以快速安装我们需要的包,可以快速删除我们不想要的包等等
NPM使用
1.NPM包安装方式
- 全局安装(一般用于安装全局使用的工具,存储在全局node_modules中)
npm install -g 包名
(默认安装最新版本)
npm uninstall -g 包名
(删除这个包)
npm update -g 包名
(更新包)
-本地安装 (一般用于安装当前项目使用的包,存储在当前项目node_modules中)
npm install 包名
(默认安装最新版本)
npm uninstall 包名
(删除这个包)
npm update 包名
(更新包)
2.初始化本地包
npm init
初始化package.json文件
npm init -y
初始化package.json文件
npm i
所有的包都会被安装
npm i --production
只会安装dependencies中的包
Yarn的使用
1什么是Yarn?
Yarn是由Facebook,Google,Exponent和Tilde联合推出的一个新的JS包管理工具,Yarn是为了弥补npm5.0之前的一些缺陷而出现的
注意点:
在npm5.0之前,yarn的优势的特别明显,但是现在NPM已经更新到10.1.x了,随着NPM的升级,NPM的优化,甚至超越了Yarn,所以个人还是建议使用NPM
2.NPM的缺陷:
2.1npm install
的时候太慢
npm 是按照队列执行每个 package,也就是说必须要等到当前package安装完成之后,才能继续后面的安装
API-Bufffer
准备知识
1.计算机只能识别0和1(因为计算机只认识通电和断电两种状态)
2.所有存储在计算机上的数据都是0和1组成的(数据越大0和1就越多)
1.什么是Buffer?
Buffer是Node JS全局对象上的一个类,是一个专门用于存储字节数据的类
Node JS提供了操作计算机底层API,计算底层只能识别0和1,所以就提供了一个专门用于存储字节数据的类
2.如何创建一个Buffer对象
2.1创建一个指定大小的Buffer
Buffer.alloc(size[, fill[, encoding]])
2.2根据数据/字符串创建一个Buffer对象
Buffer.from(string[, encoding])
3.Buffer对象本质
本质就是一个数组
1.将二进制数据装换成字符串
返回:<string> 转换后的字符串数据。
buf.toString();
2.往Buffer中写入数据
string <string> 要写入buf的字符串。
offset <insteger> 开始写入 string 之前要跳过的字节数。默认值:0。
length <integer>要写入的字节数。默认值:buf.length - offset。
encoding <string> string的字符编码。默认值:‘utf8’。
返回:<integer> 已写入的字节数。
buf.write(string[, offset[, length]][, encoding])
3.从指定位置截取新Buffer
start <integer> 新Buffer开始的位置。默认值:0。
end <integer> xinBuffer结束的位置(不包含)buf.slice([start[, end]])
API-Buffer静态方法
1.检查是否支持某种编码格式
Buffer.isEncoding(encoding)
2.检查是否是Buffer类型对象
Buffer.isBuffer(obj)
totalLength
3.获取Buffer实际字节长度
Buffer.buteLength(string[, enconding])
注意点:一个汉字占用三个字节
4.合并Buffer中的数据
buffer.concat(list[, total'Length])
搭建web服务器
1.什么是HTTP模块
通过 Node JS提供的HTTP模块,我们可以快速的构造一个web服务器
也就是快速实现过去PHP服务器的功能(接受浏览器请求,响应浏览器请求等)